一、基本介绍
平时我们在配置 Nginx 代理时,一般配置的都是基于 http 或是 https 协议的代理,也就是应用层。但是有些时候,我们并不想配置这种基于应用层的代理。比如说:我们要代理到数据库上,但是数据库是不支持应用层代理的。
所以,我们并不能像平常那样来配置,不过呢,在 Nginx 1.9.0 版本后,Nginx 便可以通过配置 --with-stream 模块的方式,来实现基于四层的反向代理。因此,我们便可以通过端口代理到端口的方式来访问到数据库。
上面我们只是打个比方,其实我们是可以通过四层代理,来代理到任何使用到四层协议的服务上,而不仅仅是数据库。
二、使用 Nginx 实现四层代理配置
1.安装 Nginx
[root@Nginx ~]# yum -y install pcre-devel zlib-devel popt-devel openssl-devel openssl [root@Nginx ~]# wget http://www.nginx.org/download/nginx-1.21.0.tar.gz [root@Nginx ~]# ls anaconda-ks.cfg nginx-1.21.0.tar.gz [root@Nginx ~]# tar zxf nginx-1.21.0.tar.gz -C /usr/src/ [root@Nginx ~]# cd /usr/src/nginx-1.21.0/ [root@Nginx nginx-1.21.0]# useradd -M -s /sbin/nologin nginx [root@Nginx nginx-1.21.0]# ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-file-aio \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --with-http_flv_module \ --with-http_ssl_module \ --with-stream \ --with-pcre && make && make install [root@Nginx nginx-1.21.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ [root@Nginx nginx-1.21.0]# cd [root@Nginx ~]# nginx [root@Nginx ~]# netstat -anpt | grep 80
2.修改 Nginx 配置文件
stream
和http
区域同级即可。
[root@Nginx ~]# cat <<END >> /usr/local/nginx/conf/nginx.conf stream { upstream test_mysql { hash $remote_addr consistent; # 通过配置一致性 hash 来防止调度异常 server 192.168.1.1:3306 weight=5 max_fails=3 fail_timeout=30s; } server { listen 10086 so_keepalive=on; # 开启 TCP 存活探测 proxy_connect_timeout 10s; # 连接超时时间 proxy_timeout 300s; # 端口保持时间 proxy_pass test_mysql; } } END [root@Nginx ~]# nginx -s reload
3.验证
1)安装 MariaDB 数据库
[root@Nginx ~]# yum -y install mariadb mariadb-server mariadb-libs mariadb-devel [root@Nginx ~]# systemctl start mariadb [root@Nginx ~]# mysqladmin -uroot password '123123'
2)验证