nginx udp proxy pass ip

时间:2016-08-30 06:17:48

标签: nginx proxy udp syslog

寻找有关NGINX的一些指导并将源IP地址传递给后端服务器。到目前为止,我已经找到了关于如何为http / s请求执行此操作的配置,而不是针对非HTTP / s端口的TCP / UDP负载平衡。

我有一个UDP代理设置并使用NGINX,但我的应用程序(syslog服务器)中的源IP显示为NGINX,而不是将syslog消息传递给它的设备。

以下是我的配置 - 到目前为止,我将如何从原始服务器传递源IP。

{{1}}

任何意见都会受到赞赏!

3 个答案:

答案 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;