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的主要内容,如果未能解决你的问题,请参考以下文章

nginx 代理转发 传递真实 ip 地址

首层nginx 传递 二级代理nginx 客户端真实IP的方法

nginx能代理公网Ip非80端口吗

nignx的TCP和UDP调度(nginx反向代理)

Nginx多层反向代理透传客户端真实IP

nginx反向代理取得IP地址