nginx 代理tcp端口
				
									
					
					
						|  | 
							admin 2025年6月30日 18:9
								本文热度 2259 | 
					
				 
				应用场景,我们由于网络限制,只有前置机或者固定服务器可以与外部链接, 要使用 Nginx 代理 TCP 端口(如数据库、SSH、游戏服务器等非 HTTP 服务),需使用 Nginx Stream 模块。该模块专门处理 TCP/UDP 流量,配置与 HTTP 代理有所不同。以下是详细配置步骤:
一、确认 Nginx 是否支持 Stream 模块
- 检查编译参数:nginx -V 2>&1 | grep stream
 
 
- 若输出包含 --with-stream,说明已启用 Stream 模块。
- 若未启用,需重新编译 Nginx 并添加 --with-stream参数(或使用包含该模块的发行版,如 Ubuntu 的nginx-extras)。
二、配置 TCP 代理(示例:代理 MySQL 端口 3306)
1. 创建 Stream 配置文件
在 Nginx 配置目录(通常为 /etc/nginx)下创建 stream.conf:
# /etc/nginx/stream.conf
stream {
    # 定义日志格式(可选)
    log_format tcp '$remote_addr [$time_local] '
                   '$protocol $status $bytes_sent $bytes_received '
                   '$session_time "$upstream_addr" '
                   '"$upstream_bytes_sent" "$upstream_bytes_received"';
    access_log /var/log/nginx/tcp_access.log tcp;
    error_log /var/log/nginx/tcp_error.log;
    # TCP 代理配置(监听 63306 端口,转发到后端 MySQL 3306)
    server {
        listen 63306;  # 代理服务器监听端口
        proxy_pass 192.168.1.100:3306;  # 后端真实服务器地址:端口
        # 可选参数
        proxy_connect_timeout 10s;       # 连接超时时间
        proxy_timeout 300s;             # 会话超时时间
        proxy_buffer_size 16k;          # 缓冲区大小
    }
}
2. 在主配置文件中引入 Stream 配置
编辑 /etc/nginx/nginx.conf,在文件末尾添加:
# /etc/nginx/nginx.conf
include /etc/nginx/stream.conf;
三、多端口代理配置示例
若需同时代理多个 TCP 服务(如 MySQL 和 Redis),可在 stream.conf 中添加多个 server 块:
stream {
    # MySQL 代理
    server {
        listen 63306;
        proxy_pass 192.168.1.100:3306;
    }
    # Redis 代理
    server {
        listen 6379;
        proxy_pass 192.168.1.101:6379;
    }
    # SSH 代理
    server {
        listen 2222;
        proxy_pass 192.168.1.102:22;
    }
}
四、常用 Stream 模块参数说明
|  |  |  | 
|---|
| listen |  | 63306 | 
| proxy_pass |  | 192.168.1.100:3306 | 
| proxy_connect_timeout |  | 10s | 
| proxy_timeout |  | 300s | 
| proxy_buffer_size |  | 8k | 
| ssl_preread | 启用 SSL/TLS 预读取(用于 SNI 路由) | on | 
五、验证配置并重启 Nginx
- 重启 Nginx: - systemctl restart nginx
 
 
- 验证代理是否生效: - # 检查端口监听
 netstat -tulpn | grep nginx
 
 # 使用 telnet 测试连接(以 MySQL 为例)
 telnet localhost 63306
 
 
六、注意事项
- 示例(以 firewalld为例):firewall-cmd --add-port=63306/tcp --permanent
 firewall-cmd --reload
 
 
- 高并发场景下,建议调整 worker_processes和worker_connections参数。
- 开启 sendfile提升传输效率:stream {
 sendfile on;
 # 其他配置...
 }
 
 
- 通过 tcp_access.log和tcp_error.log监控代理流量。
- 使用 nginx -s reload热加载配置,避免中断服务。
通过以上配置,Nginx 可高效代理各类 TCP 服务,实现负载均衡、端口映射、安全隔离等功能。
阅读原文:原文链接
该文章在 2025/7/1 10:58:40 编辑过