一、前言
在日常工作中,经常存在下面场景:1.数据库安装的主机不能本地直接访问,但是本地可以访问的主机到数据库是没问题的。2.基于安全原因等导致部分主机对外访问开放,或者开放主机有限等。这个时候我们就想通过这台可直接访问的主机访问数据库,结合nginx反向代理,本文主要阐述配置过程。
二、nginx配置
2.1 nginx模块升级
如果基于现有nginx进行升级,可以查看博客(《如何对在用的nginx添加新模块》)[/2022/05/23/如何对在用的nginx添加新模块/]。
2.2 安装ngx_stream_core_module
需要用到ngx_stream_core_module模块,该模块不是默认构建的,需要在configure时添加--with-stream来进行构建。如下所示:
1 | ./configure --prefix=/opt/nginx --with-http_stub_status_module --with-stream |
2.3 配置ngx_stream_core_module
配置模式主要使用stream作用域,与http块平级,定义在main块中。如下所示:
1 | stream { |
上面使用了7708端口代理了135.202.xxx.xxx:xxxx地址的pg数据库;使用了7709端口代理了135.202.xxx.xxx:xxxx地址的mysql数据库。
2.4 限制访问 IP
实现了对连接的代理,所有人都可以通过访问Nginx来连接MySQL服务器,解决了外网无法连接的问题。为了更进一步的缩小访问范围,保证数据安全,我们可以限制只有公司网络的IP地址可以通过Nginx进行连接。Nginx提供了ngx_stream_access_module模块,其指令非常简单,仅包含allow和deny指令。
示例
1 | # 允许192.168.137.1访问 |
注意
:如果指定了allow,需要配合deny使用,否则就是允许所有的IP地址访问。