寻找有关NGINX的一些指导并将源IP地址传递给后端服务器。到目前为止,我已经找到了关于如何为http / s请求执行此操作的配置,而不是针对非HTTP / s端口的TCP / UDP负载平衡。
我有一个UDP代理设置并使用NGINX,但我的应用程序(syslog服务器)中的源IP显示为NGINX,而不是将syslog消息传递给它的设备。
以下是我的配置 - 到目前为止,我将如何从原始服务器传递源IP。
{{1}}
任何意见都会受到赞赏!
答案 0 :(得分:8)
Much appreciated to Alexey above. Late night and I passed over this setting / documentation.
Very simple fix here by adding the following to the server
block
proxy_bind $remote_addr transparent;
答案 1 :(得分:2)
对于其他任何想要实现这一目标的人来说 - 附件是我的模板配置,我用它来实现负载平衡系统日志而不修改源信息。
重要的是:
1.如果使用透明,请确保以root身份运行,或相应地修改selinux策略。
2.此配置构建为允许多个子网上的多个侦听接口。如果您只使用单个界面,请删除第二个server
节。
干杯。
user root;
worker_processes 8;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
stream {
log_format basic '$time_iso8601 $remote_addr '
'$protocol $status $bytes_sent $bytes_received '
'$session_time $upstream_addr '
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
# Enable access_log statements for debugging
access_log /var/log/nginx/stream.log basic;
upstream syslog_servers {
least_conn;
server 1.2.3.4:10514;
server 1.2.3.5:10514;
server 1.2.3.6:10514;
}
server {
listen 10.11.12.13:514;
listen 10.11.12.13:514 udp;
proxy_responses 0;
proxy_pass syslog_servers;
proxy_buffer_size 4096k;
proxy_bind $remote_addr transparent;
# access_log /var/log/nginx/stream.log basic;
}
server {
listen 11.12.13.14:514;
listen 11.12.13.14:514 udp;
proxy_responses 0;
proxy_pass syslog_servers;
proxy_buffer_size 4096k;
proxy_bind $remote_addr transparent;
# access_log /var/log/nginx/stream.log basic;
}
答案 2 :(得分:0)
如果您需要保留源端口,则要使用的指令是
proxy_bind $remote_addr:$remote_port transparent;