我有两台服务器为一个网站运行负载平衡,它们具有相同的配置。
我想阻止从某个 IP 访问我的网站(假设它是 127.1.2.3)。
<Directory "/var/www/html/example.com">
AllowOverride all
SetEnvIf X-Forwarded-For ^127\.1\.2\.3 attacker
Order Allow,Deny
Allow from env=!attacker
# ErrorDocument 403 http://google.com
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE application/x-httpd-eruby
AddOutputFilterByType DEFLATE text/html
</Directory>
以下是两台服务器中的 Apache 版本:
- 阿帕奇/2.2.3
- 阿帕奇/2.2.18
问题出现在运行 Apache 2.2.3 的服务器上。它不仅封锁了攻击者的 IP,还封锁了所有其他 IP。而使用相同配置,第二台服务器运行正常。
我查看了 Apache 文档以确保我的配置语法没有错误。我还运行了httpd -t
,输出显示我的Syntax OK
。
我的配置可能存在什么问题env
?
答案1
所以您有两个版本的 Apache,并且您发现它在 2.2.3 上不起作用,但在 2.2.18 上起作用?
将 2.2.3 服务器升级到 2.2.18。
答案2
请使用这个配置:
SetEnvIf X-Forwarded-For "(,| |^)192\.168\.1\.1(,| |$)" attacker
Order Allow,deny
Deny from env=attacker
Allow From all
....
如果这不起作用,那么 Apache 2.2.3 版本太旧,该模块无法正常运行。