Nginx代理转发Mysql

2021-01-04 09:57:43 浏览数 (1)

前言

百度百科是这样写的

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

但是从Nginx从1.9.0开始,新增加了一个stream模块,用来实现四层协议的转发、代理或者负载均衡等。

比如在内网有一个mysql服务,想暴露到公网上去使用,就可以通过nginx代理的方式通过nginx来进行内网Mysql的访问。

也就是说Nginx本来只支持HTTP,添加stream模块后就支持TCP/UDP了。

添加stream模块

查看是否添加该模块

代码语言:javascript复制
nginx -V

搜索是否包含--with-stream,如果包含则已添加过此模块。

如果没有需要编译添加

代码语言:javascript复制
./configure  --prefix=/opt/apps/nginx --with-stream
make && make install

注意

--prefix=/opt/apps/nginx 是nginx的执行文件位置,根据自己的服务器的实际情况配置。

转发TCP(Mysql)配置

假如Nginx的公网IP为110.119.120.121,Mysql所在的同一个内网的内网IP为192.168.1.20

代码语言:javascript复制
#stream配置
stream {
    server {
       listen 13306; 
       proxy_connect_timeout 1s;
       proxy_timeout 3s;
       proxy_pass 192.168.1.20:3306;    
    }
}

http {
}

这样我们就能通过110.119.120.121:13306访问到Mysql服务了。

注意

  1. stream配置项和http同级。
  2. 不支持不同域名转发不同Mysql的功能。

这样做的好处

  • 避免数据库服务器直接暴漏在公网
  • 方便数据库秒级切换

UDP负载均衡

下面就是UDP负载均衡的示例

代码语言:javascript复制
#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 {
    upstream dns {
       server 192.168.111.99:10086;
       server 192.168.111.100:10086;
    }

    server {
        listen 192.168.111.98:10086 udp;
        proxy_responses 1;
        proxy_timeout 20s;
        proxy_bind $server_addr:$remote_port;
        proxy_pass dns;
    }
}

0 人点赞