流量转发不仅可以用 iptables ,nginx 也同样可以做到,并且还有不俗的表现。
简单的配置
为方便管理,首先新建一个文件夹,例如在路径 /usr/local/nginx/conf
下新建一个名为 tcp.d
的文件夹
在文件夹中新建一个 .conf
文件,例如 tcp.conf
,文件内容如下
stream {
upstream tcpssh {
hash $remote_addr consistent;
server 1.1.1.1:443 weight=3 max_fails=3 fail_timeout=10s;
}
server {
listen 18888;
listen 18888 udp;
proxy_pass tcpssh;
proxy_connect_timeout 20s;
proxy_timeout 5m;
}
}
- 这里以转发IP
1.1.1.1
的443
端口为例,实际需要替换为你所需要转发的IP/域名:端口
listen
后的监听端口可替换为你所需要监听的端口proxy_pass
后的字段为upstream
后的字段,可自行替换,二者需相同weight
为权重
转发多个地址
如需转发多个地址,在 stream
模块内新增相应内容即可,例如
stream {
upstream tcpssh {
hash $remote_addr consistent;
server 1.1.1.1:443 weight=3 max_fails=3 fail_timeout=10s;
}
server {
listen 18888;
listen 18888 udp;
proxy_pass tcpssh;
proxy_connect_timeout 20s;
proxy_timeout 5m;
}
upstream tcpssh {
hash $remote_addr consistent;
server 2.2.2.2:443 weight=4 max_fails=3 fail_timeout=10s;
}
server {
listen 18889;
listen 18889 udp;
proxy_pass tcp2;
proxy_connect_timeout 20s;
proxy_timeout 5m;
}
}
使转发生效
修改 nginx.conf
,添加如下一行以包含之前创建的配置文件
include /usr/local/nginx/conf/tcp.d/*.conf;
重载/重启 nginx
service nginx reload
service nginx restart
至此转发应该就成功了。