nginx udp 代理传递 ip
Posted
技术标签:
【中文标题】nginx udp 代理传递 ip【英文标题】:nginx udp proxy pass ip 【发布时间】:2016-08-30 06:17:47 【问题描述】:寻找有关 nginx 的一些指导并将源 IP 地址传递给后端服务器。到目前为止,我已经找到了关于如何为 http/s 请求执行此操作的配置,但没有找到针对非 http/s 端口的 TCP/UDP 负载平衡的配置。
我有一个 UDP 代理设置并使用 NGINX,但我的应用程序(系统日志服务器)中的源 IP 显示为 NGINX,而不是向它传递系统日志消息的设备。
以下是我的配置 - 到目前为止,我对如何从原始服务器传递源 IP 空手而归。
stream
server
listen 514 udp;
proxy_pass syslog_standard;
upstream syslog_standard
server syslog1.ars.com:10514 max_fails=1 fail_timeout=10s;
server syslog2.ars.com:10514 max_fails=1 fail_timeout=10s;
任何意见将不胜感激!
【问题讨论】:
nginx.org/en/docs/stream/… 非常感谢,深夜,完全忽略了设置。对于那些感兴趣的人,它只是proxy_bind $remote_addr transparent;
【参考方案1】:
非常感谢上面的 Alexey。深夜,我通过了这个设置/文档。
通过将以下内容添加到 server
块中非常简单的解决方法
proxy_bind $remote_addr transparent;
【讨论】:
【参考方案2】:对于其他希望完成此任务的人 - 附件是我用来在不修改源信息的情况下实现负载平衡 syslog 的模板配置。
重要的部分是:
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;
【讨论】:
【参考方案3】:如果您需要保留源端口,则要使用的指令是
proxy_bind $remote_addr:$remote_port transparent;
【讨论】:
以上是关于nginx udp 代理传递 ip的主要内容,如果未能解决你的问题,请参考以下文章