CentOS 7.9使用Nginx的stream模块实现内网端口转发

花门楼前见秋草,岂能贫贱相看老。这篇文章主要讲述CentOS 7.9使用Nginx的stream模块实现内网端口转发相关的知识,希望能为你提供帮助。
1、stream模块简介:
nginx从1.9.0版本开始,新增了stream模块,可以实现四层协议的转发、代理或负载均衡等,比如在内网有mysql服务,想暴露到公网上使用,就可以通过Nginx代理方式进行内网MySQL访问,也可实现后端服务的负载均衡。
2、演示环境:



主机名




操作系统




IP




端口




nginx




CentOS7.9




192.168.0.120




80




mariadb




CentOS7.9




192.168.0.121




3306


备注:两台主机分别关闭firewalld和SELinux
3、mariadb主机部署MariaDB:
(1)安装、启动MariaDB:
# yum -y install mariadb-server
# systemctl start mariadb
# systemctl enable mariadb
# ss -tunlp | grep 3306

(2)初始化MariaDB:
# mysql_secure_installation

(3)登录MariaDB,删除不必要用户:
# mysql -uroot -p

MariaDB [(none)]> use mysql;
MariaDB [mysql]> select host,user,passwordfrom user;

CentOS 7.9使用Nginx的stream模块实现内网端口转发

文章图片


MariaDB [mysql]> delete from user wherehost=\'localhost\';
MariaDB [mysql]> delete from user where host=\'127.0.0.1\';
MariaDB [mysql]> delete from user wherehost=\'::1\';
MariaDB [mysql]> flush privileges;
MariaDB [mysql]> select host,user,passwordfrom user;

CentOS 7.9使用Nginx的stream模块实现内网端口转发

文章图片


(4)创建测试数据库:
MariaDB [mysql]> create databasenginx_proxy;
MariaDB [mysql]> show databases;

CentOS 7.9使用Nginx的stream模块实现内网端口转发

文章图片


(5)授权root用户远程登录,方便测试:
MariaDB [mysql]> grant all on *.* to\'root\'@\'192.168.0.%\' identified by \'123456\';
MariaDB [mysql]> flush privileges;

4、nginx主机部署Nginx:
(1)安装依赖软件包:
# yum-y install gcc gcc-c++ pcre-devel zlib-devel

(2)编译安装Nginx:

# tar-xf nginx-1.20.1.tar.gz -C /usr/src
# cd/usr/src/nginx-1.20.1
# ./configure--prefix=/usr/local/nginx --with-stream
# make& & make install

备注:--with-stream启用TCP/UDP代理模块
(3)配置stream模块:
# vim /usr/local/nginx/conf/nginx.conf

worker_processes auto;
events {
use epoll;
worker_connections 65535;
}
?
stream {
server {
listen 3366;
proxy_connect_timeout 60s;
proxy_timeout 10m;
proxy_pass 192.168.0.121:3306;
}
}
 
http {
......
}
?备注:
a、proxy_connect_timeout:定义与代理服务器建立连接的超时时长,默认60秒
b、proxy_timeout:设置客户端或代理服务器中两个连续读或写操作之间的连接超时时长,如果在此时间内未传输任何数据,则连接将关闭,默认10分钟?
(4)启动Nginx:
# /usr/local/nginx/sbin/nginx -t
# /usr/local/nginx/sbin/nginx
# ss -tunlp | grep 80

5、测试:
(1)nginx主机安装数据库客户端工具:
# yum -yinstall mysql

(2)nginx主机通过Nginx代理模块访问内网MariaDB:
# mysql-uroot -h192.168.0.120 -P3366 -p

【CentOS 7.9使用Nginx的stream模块实现内网端口转发】
CentOS 7.9使用Nginx的stream模块实现内网端口转发

文章图片


    推荐阅读