在我的 Apache 中,我有一个很长的要阻止的 IP 列表(出于某些原因)。然后我目前将这些规则放入.htaccess
我拥有的每个 docroot(域)的文件中。
规则如下:
SetEnvIF X-Forwarded-For "1.2.3.*" DenyIP
SetEnvIF X-Forwarded-For "100.200.*.*" DenyIP
..
..
..
..
..
..
Order Deny,Allow
Deny from env=DenyIP
这些相同的.htaccess
文件现在位于如下位置:
/var/www/html/www.site-a.com/.htaccess
/var/www/html/www.site-b.com/.htaccess
/var/www/html/www.site-c.com/.htaccess
/var/www/html/www.site-d.com/.htaccess
/var/www/html/www.site-e.com/.htaccess
/var/www/html/www.site-f.com/.htaccess
/var/www/html/www.site-g.com/.htaccess
..
就是这样的。但是每当我需要更新 IP 时,我都必须编辑所有这些文件。
问题:
我如何应用这些通用规则服务器范围(Apache 范围),以便它们可以应用于我的 Apache 中的每个网站 docroot(域)?
答案1
- 指令
Allow
和Deny
属于上下文:Directory
和.htaccess
。 - 是
.htaccess
的等效项<Directory>
,但有限制,例如- 您不能
Include
在里面使用.htaccess
。 AllowOverride
控制您可以使用.htaccess
配置进行哪些更改。
- 您不能
配置部分有合并顺序,缩写为:
<Directory>
(正则表达式除外)并.htaccess
同时完成(.htaccess
如果允许,则覆盖<Directory>
)<DirectoryMatch>
(和<Directory ~>
)<Files>
并<FilesMatch>
同时完成<Location>
并<LocationMatch>
同时完成
您可以
<Directory>
在<VirtualHost>
部分之外拥有全局部分:节内的节
<VirtualHost>
在虚拟主机定义之外的相应节之后应用。这允许虚拟主机覆盖主服务器配置。
简而言之,在你的主函数中httpd.conf
,有这个并且不要在里面覆盖它<VirtualHost>
:
<Directory /var/www/html>
SetEnvIF X-Forwarded-For "1.2.3.*" DenyIP
SetEnvIF X-Forwarded-For "100.200.*.*" DenyIP
..
Order Deny,Allow
Deny from env=DenyIP
</Directory>
如果您不想使用长SetEnvIF
列表httpd.conf
,请使用 [ Include][6]
:
<Directory /var/www/html>
Include /path/to/SetEnvIF-list.conf
Order Deny,Allow
Deny from env=DenyIP
</Directory>
请注意这里链接的所有文档都提到的内容:
本文档涉及 Apache httpd 的 2.2 版本,该版本已不再维护。活动版本已记录在案这里。如果您尚未升级,请按照此链接了解更多信息。
访问控制Apache 2.4有点不同,但你可以在 mod_authz_core 中使用环境变量Require
env
. 设置变量时否定代替允许,您需要在实体名称not
之前使用。env
SetEnvIF X-Forwarded-For "1.2.3.*" DenyIP
<Directory "/var/www/html">
Require not env DenyIP
</Directory>