一、基本介绍

平时我们在配置 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 配置文件

  • streamhttp 区域同级即可。
[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)验证
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐