【问题标题】:nginx udp proxy pass ipnginx udp 代理传递 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;
    }
}

任何意见将不胜感激!

【问题讨论】:

  • 非常感谢,深夜,完全忽略了设置。对于那些感兴趣的人,它只是proxy_bind $remote_addr transparent;

标签: nginx proxy udp syslog


【解决方案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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-20
        • 2023-03-24
        • 2012-05-09
        • 2018-05-06
        • 2014-12-05
        • 2018-01-07
        相关资源
        最近更新 更多