我们使用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;
}
}
答案 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并将其记录下来。