Nginx 配置TCP/UDP端口转发
nginx 的功能非常强大,其中作为代理服务器是非常常用的功能,但是之前的nginx代理只能做七层代理,也就说是基于应用层面的代理,TCP层面的代理一般会配合haproxy 来使用。但是自从nginx 1.9 以后通过stream模块实现了tcp 代理功能,无需其他软件配合即可实现四层代理和七层代理,即:访问该服务器的指定端口,nginx就可以充当端口转发的作用将流量导向另一个服务器,同时获取目标服务器的返回数据并返回给请求者。nginx的TCP代理功能跟nginx的反向代理不同的是:请求该端口的所有流量都会转发到目标服务器,而在反向代理中可以细化哪些请求分发给哪些服务器;另一个不同的是,nginx做TCP代理并不仅仅局限于WEB的URL请求,还可以转发如memcached、MySQL等点到点的请求
1 安装nginx服务
yum install nginx
1.2 对于已经安装nginx的,检查是否编译时带with-stream参数
nginx -V |grep with-stream
有with-stream参数,可以代理tcp协议
2 配置nginx的tcp代理
请注意,stream块和http块是两个不同的模块,stream不属于http模块,即不能放到/etc/nginx/conf.d/,stream是通过tcp层转发,而不是http转发。
如配置在http内,启动nginx会报如下错误:
nginx: [emerg] "server" directive is not allowed here
2.1 修改主配置文件,添加stream目录记住是在最后也就是最后一个}下面加入
cd /etc/nginx/
cp -a nginx.conf{,_$(date +%F)}
vim nginx.conf
# 最后追加如下内容
# tcp/ip proxy
include /etc/nginx/tcp.d/*.conf;
2.2 添加tcp转发配置
mkdir tcp.d
cd tcp.d
在新建的 tcp.d 目录下创建 conf 文件新建一个 tcp 配置,例如我转发到IP为8.8.8.8的389端口
这里是1.18.0的nginx的配置
[root@lingling ~]# vim openldap.conf
stream {
server {
listen 3389;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass 8.8.8.8:8888;
}
}
说明:
"upstream tcpssh":转发的目的地址和端口等设置;其中tcpssh为自定义;
"server":提供转发的服务,即访问localhost:3389,会跳转至代理"tcpssh"指定的转发地址.。
这里就是配置的监听本地3389端口,会将流量相应转发到8.8.8.8服务器的8888端口上。
多端口写法
stream {
upstream kk5 {
server 10.0.58.23:5100;
}
upstream kk5http {
server 10.0.58.23:8000;
}
upstream kk5https {
server 10.0.58.23:8443;
}
server {
listen 5100;
proxy_connect_timeout 1s;
proxy_pass kk5;
}
server {
listen 8000;
proxy_connect_timeout 1s;
proxy_pass kk5http;
}
server {
listen 8443;
proxy_connect_timeout 1s;
proxy_pass kk5https;
}
}
这里注意这个转发的配置文件只能有一个不然会报错
测试配置文件是否正确
[root@lingling ~]# nginx -t -c /etc/nginx/nginx.conf
[root@lingling ~]# nginx -t -c /etc/nginx/tcp.d/openldap.conf
2.3 启动nginx服务
启动nginx服务
systemctl start nginx.service
查看是否启动
[root@lingling ~]# systemctl status nginx.service
● nginx.service - nginx - high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2018-09-29 11:34:01 CST; 5h 37min ago
Docs: http://nginx.org/en/docs/
Main PID: 26114 (nginx)
CGroup: /system.slice/nginx.service
├─26114 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
└─26115 nginx: worker process
Sep 29 11:34:01 node1 systemd[1]: Starting nginx - high performance web server...
Sep 29 11:34:01 node1 systemd[1]: Started nginx - high performance web server.
如果已经在运行请重启
现在基本上就好了测试一下没问题就好了建议使用lsof检测一下端口是否被监听
lsof -i:端口
Comments | NOTHING