检查连接限制时nginx错误的IP

我有很多次出现在nginx错误日志中的以下行。 这导致网站访问者出现50倍的错误。 我们有一个具有URL language.example.com的多语言网站

[error] 25720#0: *2716 limiting connections by zone "slimits", client: 127.0.0.1, server: localhost, request: ....... 

客户端总是显示为127.0.0.1,这是相当可疑的。

有一个正在使用localhost和另一个服务器的负载平衡。 上游的nginxconfiguration:

 upstream example.com { server 127.0.0.1:8082 weight=3 max_fails=3 fail_timeout=2; server otherserver.example.net:8082 max_fails=3 fail_timeout=2; } 

现在的slimit值被设置为40

 limit_conn slimits 40; 

据我所知,这个限制应该是REMOTE用户应该可以打开的连接的限制。 我猜远程用户的IP地址没有正确传递给nginx。

这是网站的定义:

 server { listen 80 default_server; server_name localhost; allow all; } server { listen 80; server_name *.example.com; # stop subdomains like everything.example.com deny all; } server { listen 80; server_name server.com www.example.com; location / { proxy_pass http://example.com; } } server { listen 80; server_name fr.example.com; location / { proxy_pass http://fr.example.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 

Nginx的版本是:1.0.12。

OP 在评论中表示,这一设置解决了错误的知识产权问题。

 real_ip_header X-Forwarded-For; set_real_ip_from 0.0.0.0/0; 

但是, set_real_ip_from 0.0.0.0/0将来可能会很麻烦。 基本上nginx信任所有的互联网主机给予真正的IP地址通过X-Forwarded-For头,甚至欺骗性的请求。 例如(信贷到这个线程 ):

 curl --header "X-Forwarded-For: 1.2.3.4" "http://localhost/" 

以上请求是通过本地主机curl生成的,不是来自nginx负载均衡器。

目前,欺骗问题并不困难,因为服务器只能在127.0.0.1中,但可能是安全防范措施。

所以,我们改变它,所以nginx只信任来自负载均衡器IP地址127.0.0.1的X-Forwarded-For

 real_ip_header X-Forwarded-For; set_real_ip_from 127.0.0.1;