我们最近从Apache 2.2升级到了2.4。我们有两个位于负载平衡器后面的Web服务器,这些服务器通过Cloudflare来提供流量。
在Web服务器上,我们安装了mod_cloudflare。我们通过以下指令考虑了负载均衡器:
CloudflareRemoteIPTrustedProxy 172.21.171.17
CloudflareRemoteIPTrustedProxy 172.21.171.18
我们在多个站点上都有一个管理区域,还有一些我们要IP限制的博客和其他脚本。我们使用Directory
指令中的正则表达式匹配来完成此操作,如下所示:
<Directory ~ "^/var/www/vhosts/[^/]+/public/((sage_import)|(partner)|((blog/)?wp-)?admin)">
AllowOverride All
Require ip 111.111.111.111 222.222.222.222 333.333.333.333
</Directory>
此工作可以正常处理的大多数URL。
domain.tld/sage_import/script.php
domain2.tld/blog/wp-admin
等等但是,用domain3.tld/admin
(在Apache 2.2上可以正常使用)访问的主管理区域不起作用。奇怪的是,我们看到503错误。日志中没有显示503错误-大概根本就没有碰到服务器吗? (我还跟踪了特定于站点的访问和错误日志,以及常规的Apache访问和错误日志,那里什么也没有。)
当使用ip 111.111.111.111进行浏览时,如果我从Require ip
行中删除了该IP,则工作页面会突然显示403错误,并且日志反映了这一点。 /admin
页面 still 显示503错误。
但是,当我将负载均衡器IP添加到Require ip
行时,503错误消失了,我现在可以访问该页面。
Require ip 111.111.111.111 222.222.222.222 333.333.333.333 172.21.171.17 172.21.171.18
在添加负载均衡器IP之后比较请求的日志似乎没有发现任何有趣的事情:
111.111.111.111 (141.101.98.187, 172.21.171.18) - - [27/Nov/2018:21:54:16 +0000] "GET /blog/wp-admin/ HTTP/1.0" 200 77064 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.1 Safari/605.1.15"
...
111.111.111.111 (141.101.98.187, 172.21.171.18) - - [27/Nov/2018:21:54:24 +0000] "GET /admin/ HTTP/1.0" 200 375 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.1 Safari/605.1.15"
...
111.111.111.111 (141.101.98.187, 172.21.171.18) - - [27/Nov/2018:21:54:37 +0000] "GET /sage_import/export.php HTTP/1.0" 200 33289 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.1 Safari/605.1.15"
正在使用的LogFormat如下:
LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" combined
注意:将Require all granted
添加到上述Directory
指令中也可以。
我也尝试过:
SetEnvIf X-Forwarded-For 111.111.111.111 allow
Require env allow
代替Require ip
,但仍返回相同的503,
导致这503错误的我的配置出了什么问题?