Nginx 代理 MySQL 连接
使用 Nginx 机器当做跳板机,外部机器通过 Nginx 机器连接到 mysql 数据库并进行操作。在 nginx 中配置内容进行访问限制。一台服务器并安装Nginx,且与MySQL服务器处于一个内网之中,内网之间可以访问。
文章目录
Nginx 代理 MySQL 连接
1. 前言
本次测试目的:
- 使用 Nginx 机器当做跳板机,外部机器通过 Nginx 机器连接到 mysql 数据库并进行操作。
- 在 nginx 中配置内容进行访问限制。
要求:
- 一台服务器并安装Nginx,且与MySQL服务器处于一个内网之中,内网之间可以访问。
2. 部署 Nginx,MySQL
👉 部署 nginx
参考连接:Nginx
部署要求:
- 需要用到
ngx_stream_core_module
模块,该模块不是默认构建的,需要在configure时添加--with-stream
来进行构建- 示例:
./configure --with-stream
👉 部署 mysql
参考连接:MySQL
3. ngx_stream_core_module 配置方式
3.1 stream
该指令定义了stream服务器。与http块平级,定义在main块中。
- 作用域:main
- 语法格式:
stream {
server {
......
}
}
3.2 server
该指令定义一个虚拟主机,与http块中的server类似。我们可以在stream块中定义多个server块。
- 作用域:stream
- 语法格式:
stream {
server {
......
}
server {
......
}
}
3.3 listen
该指令定义虚拟主机server要监听的socket的地址和端口。
- 作用域:server
- 语法格式:listen address:port;
listen 127.0.0.1:3306;
listen *:3306;
# 效果与listen *:3306一样
listen 3306;
listen localhost:3306;
3.4 配置示例
MySQL服务器,端口3306(单机环境)
stream {
server {
listen 3306;
proxy_pass 192.168.110.101:3306;
}
}
MySQL服务器,端口3306(集群环境)
stream {
upstream mysql_socket {
server 192.168.110.101:3306;
}
server {
listen 3306;
proxy_pass mysql_socket;
}
}
4. 限制访问 IP
实现了对连接的代理,所有人都可以通过访问Nginx来连接MySQL服务器,解决了外网无法连接的问题。
为了更进一步的缩小访问范围,保证数据安全,我们可以限制只有公司网络的IP地址可以通过Nginx进行连接。
Nginx提供了
ngx_stream_access_module
模块,其指令非常简单,仅包含allow和deny指令。
4.1 allow
该指令设置指定的IP允许访问。可以和deny指令配合使用
- 作用域:stream, server
- 语法:allow address | CIDR | unix: | all;
- 示例
# 允许192.168.137.1访问
allow 192.168.137.1;
# 允许192.168.137.1到192.168.255.254
allow 192.168.137.0/16;
# 允许192.168.137.1到192.168.137.254
allow 192.168.137.0/24;
# 允许所有的IP访问
allow all;
4.2 deny
该指令设置指定的IP禁止访问。可以和allow指令配合使用。
- 作用域:stream, server
- 语法:deny address | CIDR | unix: | all;
- 示例
# 禁止192.168.137.1访问
deny 192.168.137.1;
# 禁止192.168.137.1到192.168.255.254
deny 192.168.137.0/16;
# 禁止192.168.137.1到192.168.137.254
deny 192.168.137.0/24;
# 禁止所有的IP访问
deny all;
4.3 配置示例
禁止所有的IP访问,192.168.137.102除外。
allow 192.168.137.102;
deny all;
如果指定了allow,需要配合deny使用,否则就是允许所有的IP地址访问。
5. 综合案例
只允许192.168.137.102通过Nginx连接MySQL服务器。
stream {
allow 192.168.137.102;
deny all;
server {
listen 3306;
proxy_pass 192.168.137.130:3306;
}
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)