我在负载平衡的 Nginx 集群上有几个 wordpress 站点。我希望在这些上阻止对 /wp-admin 和 /wp-login.php 的访问。客户不愿意使用 Wordfence 之类的插件来实现这一点(可以理解)。
负载均衡器在 X-Forwarded-For 中转发真实的客户端 IP,这存在于 Nginx 中,因为我目前在我的主要日志格式中使用它与"$http_x_forwarded_for"。
这是我当前的位置块:
location ~ ^/(wp-admin|wp-login.php) {
real_ip_header X-Forwarded-For;
try_files $uri $uri/ /index.php?$args;
index index.html index.htm index.php;
root /var/www/vhosts/domain.com/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
allow 1.1.1.1;
allow 2.2.2.2;
allow 3.3.3.3;
#allow 10.10.85.0/24;
deny all;
}
如您所见,我使用“real_ip_header X-Forwarded-For;” 声明真正的IP应该是什么。但这不起作用。有了上述内容,所有对那里的请求都会被阻止。如果我取消注释私有10.10.85.0/24子网(这是从负载均衡器传送流量的私有网络),那么每个人都可以访问这些位置。
我确实在 Nginx 中编译了 realip 模块,如下所示:
[root@STR-MAI-ORDS1 conf.d]# 2>&1 nginx -V | tr -- - '\n' | grep http_realip_module
http_realip_module
[root@STR-MAI-ORDS1 conf.d]#
在我的日志文件中,我可以看到通过使用 X-Forwarded-For 打印到日志的真实公共 IP,但同样不适用于这个位置块 realip,我不知道为什么。
如果重要的话,环境如下所示:
- pfSense 固件(2 节点 HA)
- Zevenet 负载均衡器(2 节点 HA)
- CentOS 6.x Web 服务器(3 节点集群)
网络堆栈是:
- Nginx v1.12.0
- PHP-FPM v7.0.20 (fastcgi)
关于我做错了什么的任何建议都会很棒。谢谢。