项目开发部署中,经常会遇到数据库安装在内网,但是我们的应用服务只能部署在外网,如何实现外网服务访问连接内网数据库呢?本文以MySQL数据库为例,介绍如何通过Nginx配置实现外网访问内网数据库。

1、一层代理

1.1、前置服务器

我们首先需要保证有一台前置机服务器,这台服务器既要可以访问内网的数据库,又要可以通过外网进行访问到这台前置机,然后在这台前置服务器上安装部署Nginx来实现数据代理。

1.2、Nginx配置

找到Nginx的安装目录,打开conf文件夹下的nginx.conf文件,在里面添加如下配置:

events {
    worker_connections  1024;  # 设置每个 worker 进程的最大连接数
}

stream {
    # MySQL 代理配置
    upstream mysql_upstream {
        server 192.168.0.25:3306;  # 你的 MySQL 服务器地址
    }

    server {
        listen 8083;  # 代理监听的端口
        proxy_pass mysql_upstream;
        proxy_connect_timeout 1s;
        proxy_timeout 24h;
    }
}

需要注意的是,我们配置Nginx代理MySQL的时候,不是通过http来代理的,而是通过流的格式来代理的。

修改配置后,重启下Nginx即可,然后通过外网IP和端口号访问前置机,就相当于直接访问内网数据库了。

1.3、测试

可以通过navicat等数据库的客户端连接工具进行测试。

2、多层代理

想要对nginx进行多层代理的方式也很简单,只要我们能够理解上面一层代理的方式,既可以对数据库进行多层级的代理。

例如,我们有A、B、C、D四台服务器,B能访问A的数据库,C能访问B的指定端口,D能访问C的指定端口;那么我们首先在B服务器中将A中的数据库代理到C能访问的指定端口下(按照上面一层代理的方式),在C服务器下使用B服务器IP+代理出来的指定端口进行测试服务器是否连通,以此类推,在C服务器上将B服务器的IP+端口(刚刚代理出来的能够访问内网数据库的地址)代理到D能够访问的指定端口,重启下Nginx,在D服务器上进行测试。即可

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐