在Nginx中启用Stream模块并配置TCP/UDP转发指南

一、检查Stream模块状态

1. 查看Nginx编译参数

nginx -V 2>&1 | grep --color --with-stream

如果输出包含以下任意一种结果,说明已编译Stream模块:

  • --with-stream(静态编译)
  • --with-stream=dynamic(动态模块,需手动加载)

2. 动态模块的特殊处理
若结果显示为--with-stream=dynamic,则需确保Nginx启动时加载动态库。在Alibaba Linux 3系统中,检查以下文件是否存在自动加载配置:

/usr/share/nginx/modules/mod-stream.conf

若缺少该文件,需手动在nginx.conf顶部添加:

load_module /usr/lib64/nginx/modules/ngx_stream_module.so;

二、安装与加载Stream模块

1. 补充安装模块(若缺失)

yum install -y nginx-mod-stream

2. 定位动态库路径

find / -iname ngx_stream_module.so 2>/dev/null

典型路径:/usr/lib64/nginx/modules/ngx_stream_module.so


三、配置Stream转发

1. 编辑主配置文件
打开nginx.conf,在events块同级添加以下内容:

stream {
    upstream realmd_backend_server {
        server 192.168.83.6:3724;
    }
    upstream mangos_backend_server {
        server 192.168.83.6:8085;
    }

    server {
        listen 3724;
        proxy_pass realmd_backend_server;
    }
    server {
        listen 8085;
        proxy_pass mangos_backend_server;
    }
}

2. 命令注释说明

  • upstream:定义后端服务器地址池
  • server:监听端口并转发至指定upstream

四、验证与应用配置

1. 语法检查

nginx -t

成功输出示例:

nginx: configuration file /etc/nginx/nginx.conf test is successful

2. 重启Nginx服务

systemctl restart nginx

五、常见问题排查

  1. 模块加载失败

    • 检查load_module路径是否正确
    • 确认动态库权限:chmod 644 /usr/lib64/nginx/modules/*
  2. 启动报错

    • 查看日志定位问题:tail -f /var/log/nginx/error.log
  3. 防火墙拦截

    firewall-cmd --permanent --add-port=3724/tcp
    firewall-cmd --permanent --add-port=8085/tcp
    firewall-cmd --reload

六、扩展应用

  • 健康检查
    upstream中添加主动探测策略:

    health_check interval=10s timeout=3s;
  • SSL加密传输
    配合stream_ssl_module实现加密转发:

    server {
        listen 443;
        ssl_certificate /path/to/cert.pem;
        ssl_certificate_key /path/to/key.pem;
        proxy_pass backend_servers;
    }

附录:配置文件完整参考

user nginx;
worker_processes auto;

# 加载动态模块(必须放在events前)
load_module /usr/lib64/nginx/modules/ngx_stream_module.so;

events {
    worker_connections 1024;
}

stream {
    upstream realmd_backend_server {
        server 192.168.83.6:3724;
    }
    upstream mangos_backend_server {
        server 192.168.83.6:8085;
    }

    server {
        listen 3724;
        proxy_pass realmd_backend_server;
    }
    server {
        listen 8085;
        proxy_pass mangos_backend_server;
    }
}

http {
    # 其他HTTP配置...
}

通过以上步骤,您已成功实现Nginx的四层流量代理能力,可适配游戏服务器、数据库集群等TCP/UDP场景需求。

版权属于: 瓦瓮煮酒 本文链接: http://whonee.net/index.php/archives/4/ 转载申明: 转载请保留本文转载地址,著作权归作者所有。

评论

等风等雨等你来