我在Load Balanced 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以进行登录,但是对于此位置块实例也是如此,我不确定原因。
如果重要,环境如下:
网络堆栈是:
关于我做错的任何建议都会很棒。感谢。
答案 0 :(得分:2)
事实证明,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;
然后Nginx信任LB(在该子网内)并将real-ip设置为。
答案 1 :(得分:0)
您可以为多个阻止创建配置文件,如下所示。
修改ngnix配置文件
vi /usr/local/nginx/conf/nginx.conf
包含用于阻止nginx.conf中的IP的新配置文件
include blockips.conf;
保存ngnix配置文件并创建新文件
vi blockips.conf
添加列入黑名单的IP
deny 1.2.3.4;
或子网阻止
deny 91.212.45.0/24;
有关详细信息,请参阅DataTransfer 并为nginx Blocking IP