文章内容
在生产环境中使用rinetd做端口,连续碰到数次莫名的进程关闭和假死情况,原因还没有深究。使用Nginx替换后,再没有出现过此类情况。rinetd转发参照:Linux使用rinetd进行端口转发
从1.9.0开始,nginx支持TCP转发,1.9.13开始支持UDP转发。提供此功能的模块为ngx_stream_core。不过Nginx默认没有开启此模块,所以需要手动安装。
一、Nginx安装
1、下载Nginx
需要下载1.9.0以后版本,官方下载地址:http://nginx.org/en/download.html
1 2 | cd /root/software/ wget http: //nginx .org /download/nginx-1 .21.0. tar .gz |
2、解压
1 2 | cd /root/software/ tar zxvf nginx-1.21.0. tar .gz |
3、安装
进入解压后的Nginx目录,执行打包和安装操作
1 2 3 | cd /root/software/nginx-1 .21.0/ . /configure --prefix= /opt/nginx --with-stream --without-http make && make install |
注意:此处只用到转发模块,故禁用了http模块,禁用命令为:–without-http
二、配置Stream节点
1、配置nginx.conf
将日志文件保存到root下,方便管理。生成日志路径:
1 2 | mkdir /root/logs mkdir /root/logs/nginx |
编辑Nginx配置文件nginx.conf:
1 | vim /opt/nginx/conf/nginx .conf |
增加如下配置:
01 02 03 04 05 06 07 08 09 10 11 12 13 | stream { log_format proxy '$remote_addr [$time_local] ' '$protocol $status $bytes_sent $bytes_received ' '$session_time "$upstream_addr" ' '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"'; access_log /root/logs/nginx/tcp-access.log proxy ; open_log_file_cache off; # 统一放置,方便管理 include /root/nginx/*.conf; } |
由于移除了http模块,故需注释http配置,nginx.conf完整配置如下:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } stream { log_format proxy '$remote_addr [$time_local] ' '$protocol $status $bytes_sent $bytes_received ' '$session_time "$upstream_addr" ' '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"'; access_log /root/logs/nginx/tcp-access.log proxy ; open_log_file_cache off; # 统一放置,方便管理 include /root/nginx/*.conf; } |
2、转发配置
创建配置存放文件夹
1 | mkdir /root/nginx |
添加端口转发配置文件:
1 | vim /root/nginx/tcp3306 .conf |
01 02 03 04 05 06 07 08 09 10 | upstream tcp3306 { server rm-****.mysql.rds.aliyuncs.com:3306; } server { listen 3306; proxy_connect_timeout 8s; proxy_timeout 24h; proxy_pass tcp3306; } |
配置多个端口转发时,可再新增一个配置文件:
1 | vim /root/nginx/tcp6379 .conf |
01 02 03 04 05 06 07 08 09 10 | upstream tcp6379 { server r-****.redis.rds.aliyuncs.com:6379; } server { listen 6379; proxy_connect_timeout 8s; proxy_timeout 24h; proxy_pass tcp6379; } |
3、Stream节点解析
三、启动/重启Nginx
1、测试Nginx
1 | /opt/nginx/sbin/nginx -t |
2、启动Nginx
1 | /opt/nginx/sbin/nginx |
3、重启Nginx
1 | /opt/nginx/sbin/nginx -s reload |
四、开机启动
1、编辑rc.local文件
1 | vi /etc/rc .d /rc . local |
2、加入如下启动命令
1 | /opt/nginx/sbin/nginx |