[英]Nginx Location Block Access List and '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;
}
如您所見,我使用“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,我不知道為什么。
如果重要的話,環境看起來像這樣:
網絡堆棧是:
關於我做錯了什么的任何建議都會很棒。 謝謝。
原來 Nginx 中的“set_real_ip_from”不是可選的......即使我正確地將“real_ip_header”設置為“X-Forwarded-For form the LoadBalancers,Nginx 完全拒絕這樣做,因為它沒有(默認情況下)信任LB作為可以設置真實IP的來源。
解決方法是在我的位置塊中包含以下內容:
set_real_ip_from 10.10.85.0/24;
real_ip_header X-Forwarded-For;
然后 Nginx 信任 LB(位於該子網內)並將真實 IP 設置為該 LB。
您可以為多個阻塞創建一個配置文件,如下所示。
修改 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;
有關更多信息,請參閱nginx 阻塞 IP和子網
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.