Dav*_*rne 2 php wordpress nginx x-forwarded-for
我在负载平衡的 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;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用“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]#
Run Code Online (Sandbox Code Playgroud)
在我的日志文件中,我可以看到通过使用 X-Forwarded-For 打印到日志中的真实公共 IP,但对于此位置块 realip 却不起作用,我不确定为什么。
如果重要的话,环境看起来像这样:
网络堆栈是:
任何关于我做错了什么的建议都会很棒。谢谢。
事实证明,Nginx 中的“set_real_ip_from”不是可选的...即使我正确地将“real_ip_header”设置为“X-Forwarded-For”形成 LoadBalancers,Nginx 完全拒绝这样做,因为它不这样做(默认情况下)信任LB作为可以设置真实IP的源。
修复方法是在我的位置块中包含以下内容:
set_real_ip_from 10.10.85.0/24;
real_ip_header X-Forwarded-For;
Run Code Online (Sandbox Code Playgroud)
然后 Nginx 信任 LB(位于该子网内)并将真实 IP 设置为其。
| 归档时间: |
|
| 查看次数: |
6796 次 |
| 最近记录: |