共计 1307 个字符,预计需要花费 4 分钟才能阅读完成。
Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 服务器。在 1.9.13 版本后,Nginx 已经支持端口转发。之前分享过《Linux 安装 rinetd 实现 TCP 端口转发》,rinetd 配置简单,使用方便,但遗憾的是不支持 UDP 转发。如果需要同时支持 TCP/UDP 端口转发可以使用 Nginx
安装 Nginx
可以自行去官方 http://nginx.org/ 下载最新版本 Nginx 编译安装,注意版本一定要大于 1.9.1,编译的时候需要 --with-stream
这个模块支持。
编译方法这里就不介绍了,这篇文章直接使用 xiaoz 写好的一键脚本安装 Nginx,省时、省力,直接执行下面的命令即可。
# 执行下面的命令,根据提示完成安装
wget https://raw.githubusercontent.com/helloxz/nginx-cdn/master/nginx.sh && bash nginx.sh
#安装完成后执行下面的命令让环境变量生效
source /etc/profile
#执行下面的命令查看 nginx 信息
nginx -V
端口转发
在 nginx.conf
添加如下配置,并使用 nginx -s reload
重载 nginx 使其生效,同时注意防火墙 / 安全组放行对应的端口。
stream {
#将 12345 端口转发到 192.168.1.23 的 3306 端口
server {
listen 12345;
proxy_connect_timeout 5s;
proxy_timeout 20s;
proxy_pass 192.168.1.23:3306;
}
#将 udp 53 端口转发到 192.168.1.23 53 端口
server {
listen 53 udp reuseport;
proxy_timeout 20s;
proxy_pass 192.168.1.23:53;
}
#ipv4 转发到 ipv6
server {
listen 9135;
proxy_connect_timeout 10s;
proxy_timeout 30s;
proxy_pass [2607:fcd0:107:3cc::1]:9135;
}
}
- listen:后面填写源端口(也就是当前服务器端口),默认协议为 TCP,可以指定为 UDP 协议
- proxy_connect_timeout:连接超时时间
- proxy_timeout:超时时间
- proxy_pass:填写转发目标的 IP 及端口号
注意:nginx 可以将 IPV4 的数据包转发到 IPV6,IPV6 的 IP 需要使用 []
括起来。
总结
目前能实现端口转发的工具大致有:rinetd、SSH、iptables、nginx、haproxy,其中 rinetd 配置最为简单,但不支持 UDP 转发,并且该软件已经好几年未更新,如果您服务器上已经安装了 nginx,不妨用 nginx 做端口转发。
此文部分内容参考了:
其它 nginx 相关文章
正文完
星哥玩云-微信公众号