文章内容
在生产环境中使用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
cd /root/software/
wget http://nginx.org/download/nginx-1.21.0.tar.gz
2、解压
cd /root/software/
tar zxvf nginx-1.21.0.tar.gz
3、安装
进入解压后的Nginx目录,执行打包和安装操作
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下,方便管理。生成日志路径:
mkdir /root/logs
mkdir /root/logs/nginx
编辑Nginx配置文件nginx.conf:
vim /opt/nginx/conf/nginx.conf
增加如下配置:
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完整配置如下:
#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、转发配置
创建配置存放文件夹
mkdir /root/nginx
添加端口转发配置文件:
vim /root/nginx/tcp3306.conf
upstream tcp3306 {
server rm-****.mysql.rds.aliyuncs.com:3306;
}
server {
listen 3306;
proxy_connect_timeout 8s;
proxy_timeout 24h;
proxy_pass tcp3306;
}
配置多个端口转发时,可再新增一个配置文件:
vim /root/nginx/tcp6379.conf
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
/opt/nginx/sbin/nginx -t
2、启动Nginx
/opt/nginx/sbin/nginx
3、重启Nginx
/opt/nginx/sbin/nginx -s reload
四、开机启动
1、编辑rc.local文件
vi /etc/rc.d/rc.local
2、加入如下启动命令
/opt/nginx/sbin/nginx