Apache 启用cloudflare时虚拟主机不工作

Apache 启用cloudflare时虚拟主机不工作,apache,.htaccess,virtualhost,cloudflare,Apache,.htaccess,Virtualhost,Cloudflare,在cloudflare之前,我能够访问phpMyAdmin链接,例如 example.com/ctrl/pmasetup 在CloudFlare之后,我得到一个403(来自我自己的apache服务器,而不是CloudFlare的错误页面) 我觉得我需要在服务器上的某个地方添加CloudFlare的反向代理,这是我在/etc/hosts中做的,现在看起来像: 127.0.0.1 localhost localhost.localdomain 104.25.68.32 example.com <

在cloudflare之前,我能够访问phpMyAdmin链接,例如

example.com/ctrl/pmasetup

在CloudFlare之后,我得到一个403(来自我自己的apache服务器,而不是CloudFlare的错误页面)

我觉得我需要在服务器上的某个地方添加CloudFlare的反向代理,这是我在
/etc/hosts
中做的,现在看起来像:

127.0.0.1 localhost localhost.localdomain
104.25.68.32 example.com <- This is the ip of my site when CloudFlare is enabled on it
编辑:即使在注释整个
RequireAny
块时,启用CloudFlare时,我仍然得到403

编辑2:如果在
位置
标记内,我只有
要求所有已授予的
,则它可以工作。那么,除了我最初提出的几个IP之外,我怎么能拒绝所有人呢


编辑3:很可能是因为CloudFlare以访问者身份更改了您的IP,所以我的apache配置无法识别它。有什么想法吗?

当存在拒绝选项时,我相信您需要使用RequireAll而不是RequireAny(因为RequireAny是2.4中的默认行为,所以不需要像您那样指定它)。试试看。

编辑后的——见下文

我认为您应该允许cloudflare的ip范围访问该站点。毕竟,请求来自cloudflare,而不是客户端

CloudFlare的ip范围可在其网站上找到,网址为:

它们还提供了一种简单的“文本/普通”格式,如下所示:

&

我还知道一个小工具,用于nginx-tho,可在以下网址获得:


编辑——从这篇文章开始,我创建了一个新版本。今天(2017.05.31)。url仍然有效。它有一个--help函数,详细说明如何设置为cronjob并包含到nginx中。使用相同的CloudFlare URL。

我更改了
requireAll
RequireAny
——同样的问题。请安装,保留旧的工作规则。如果他们向他们添加范围,请确保更新您的配置。。。如果您无法安装mod_cloudflare,请检查
CF Connecting IP
头,但仅检查
REMOTE_ADDR
是否在IP页面的范围内,因此请准备创建大量规则(您可以为禁止的
RewriteRule
设置一个庞大的
RewriteCond
列表)。
127.0.0.1 localhost localhost.localdomain
104.25.68.32 example.com <- This is the ip of my site when CloudFlare is enabled on it
<VirtualHost *:80>
        ServerAdmin support@example.com
        DocumentRoot /var/www/example.com
        ServerName example.com
        ErrorLog logs/example.com-error_log
        CustomLog logs/example.com-access_log combinedio
        Alias /ctrl /var/www/ctrl
        <Location /ctrl>
                <RequireAny>
                        Require all denied
                        Require ip {my ip}
                        Require ip 104.25.68.32 <- CloudFlare IP, again
                </RequireAny>
        </Location>
        #Header always set Access-Control-Allow-Origin "http://example.com"
        Header always set Access-Control-Allow-Origin "*"
        Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS"
        Header always set Access-Control-Max-Age "1000"
        Header always set Access-Control-Allow-Headers "*"

        RewriteEngine On
        RewriteCond %{REQUEST_METHOD} OPTIONS
        RewriteRule ^(.*)$ $1 [R=200,L]
</VirtualHost>