Nginx负载均衡器未传递原始IP地址

时间:2017-02-02 23:58:17

标签: nginx load-balancing syslog

我们使用nginx负载均衡系统日志流量,但是现在系统日志服务器会看到来自 nginx负载均衡器的IP地址的所有事件。如何让nginx“proxy_pass”方法保持源IP完整?

nginx.conf(源IP最终为nginx)

events {
   worker_connections 1024;
}
stream {
   upstream logstash_servers {
      server logstash-collector-01:514 max_fails=2 fail_timeout=5s;
      server logstash-collector-02:514 max_fails=2 fail_timeout=5s;
   }
   server {
      listen 514;
      proxy_pass logstash_servers;
   }
}

在另一个答案中,我发现有人使用“proxy_bind $ remote_addr transparent;”但当我尝试我的系统日志服务器收到 nothing 时 - 取消注释该行恢复正常(源IP仍然是错误的)。

nginx.conf(没有任何内容传递给上游服务器):

events {
   worker_connections 1024;
}
stream {
   upstream logstash_servers {
      server logstash-collector-01:514 max_fails=2 fail_timeout=5s;
      server logstash-collector-02:514 max_fails=2 fail_timeout=5s;
   }
   server {
      listen 514;
      proxy_pass logstash_servers;
      proxy_bind $remote_addr transparent;
   }
}

2 个答案:

答案 0 :(得分:2)

这里最好的答案是在proxy_pass行之后使用proxy_bind $remote_addr transparent;使nginx成为透明代理并传递原始IP地址。要使其生效,您必须在" main"中指定user root;。上下文(也就是你的nginx.conf的顶部,在任何事件之外{},stream {}等。)

答案 1 :(得分:0)

要使ip透明度正常工作,您必须将NGINX作为上游服务器上的默认网关。最好在X-Forwarded-For标头中传递原始客户端ip并将其记录下来。