我们使用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 回答
这里最好的答案是在proxy_pass行之后使用
proxy_bind $remote_addr transparent;
使nginx成为透明代理并传递原始IP地址 . 为了使其起作用,您必须在"main"上下文中指定user root;
(在nginx.conf的顶部,在任何事件{},流{}之外,等等) .要使ip透明工作,您必须使NGINX成为上游服务器上的默认网关 . 最好在X-Forwarded-For标头中传递原始客户端ip并将其记录下来 .