首页 文章

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

提问于
浏览
0

我们使用nginx对syslog流量进行负载均衡,但是现在syslog服务器可以看到来自nginx负载均衡器IP地址的所有事件 . 如何让nginx "proxy_pass"方法保持源IP完整?

nginx.conf (source IP ends up as nginx's)

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;"但是当我尝试我的系统日志服务器什么都没收到 - 取消注释该线路恢复正常(源IP仍然是错误的) .

nginx.conf (nothing gets passed to upstream servers):

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 回答

  • 2

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

  • 0

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

相关问题