如何在 Apache 配置中将目录列入白名单

如何在 Apache 配置中将目录列入白名单

在 Wordpress 中,减少服务器负载的几种有效方法之一是将各个客户端列入白名单/wp-login.php/wp-admin/

<Directory /wp-admin>
    order deny,allow
    deny from all
    allow from 10.1.1.50
    allow from ...other ips...
</Directory>

但我不想编辑并重新加载 Apache 来更改此列表。在我的虚拟主机中,我想要:

<Directory /wp-admin>
     RewriteEngine On
     RewriteMap hosts-allow txt:/var/www/html/wp/wp-admin/hosts.allow
     RewriteCond ${hosts-allow:%{REMOTE_ADDR}|NOT-FOUND} =NOT-FOUND [AND]
     RewriteCond ${hosts-allow:%{REMOTE_HOST}|NOT-FOUND} =NOT-FOUND
     RewriteRule ^ - [F]
</Directory>

但:

[root@blah httpd]# service httpd reload                                                                                                                                                                     
Reloading httpd: not reloading due to configuration syntax error
                                                       [FAILED]
[root@blah httpd]# apachectl -S                                                                                                                                                                             
Syntax error on line 34 of /etc/httpd/sites-enabled/example.org.conf:
RewriteMap not allowed here

那么有没有一种方法可以实现不需要 RewriteMap 的功能,或者我是否需要编写一个新模块?

答案1

创建 .htaccess 文件并将允许的 IP 地址放入其中。不允许在 内使用 RewriteMap Directory

答案2

尝试这个:

    RewriteMap ipslist txt:/full/path/to/iplist.txt
    RewriteCond %{REMOTE_ADDR} ^(.*)$
    RewriteCond ${ipslist:%1|black} ^black$ [NC]
    RewriteRule (.*) - [F]

你的文件看起来应该是这样的:

192.168.0.12 ok
127.0.0.1 ok
[...]

相关内容