1.前言
我们的生产环境基本上都部署在云服务器上,例如应用服务器、MySQL服务器等。如果MySQL服务器直接暴露在公网,就会存在很大的风险,为了保证数据安全,MySQL服务器的端口是不对外开放的。
好巧不巧,线上业务遇到bug了,开发的小伙伴需要远程连接MySQL来查看数据,那应该怎么办呢?
我们可以通过Nginx代理(“跳板机”)来进行连接。
2.Nginx代理连接
要实现对连接的代理转发,我们需要一台服务器并安装Nginx,且与MySQL服务器处于一个内网之中,内网之间可以访问。
其次,我们需要用到ngx_stream_core_module模块,该模块不是默认构建的,我们需要在configure时添加--with-stream来进行构建。
既然要用到ngx_stream_core_module模块,先看看其提供的指令,我们才知道怎么来进行配置。
1)stream
该指令定义了stream服务器。与http块平级,定义在main块中。
作用域:main
语法:stream {...}
示例:
stream{
server{
......
}
}
2)server
该指令定义一个虚拟主机,与http块中的server类似。我们可以在stream块中定义多个server块。
作用域:stream
语法:server {...}
stream{
server{
......
}
server{
......
}
}
3)listen
该指令定义虚拟主机server要监听的socket的地址和端口。
作用域:server
语法:listen address:port;
示例:
listen127.0.0.1:3306; listen*:3306; #效果与listen*:3306一样 listen3306; listenlocalhost:3306;
4)配置示例
MySQL服务器,端口3306(单机环境)
stream{
server{
listen3306;
proxy_pass192.168.110.101:3306;
}
}
MySQL服务器,端口3306(集群环境)
stream{
upstreammysql_socket{
server192.168.110.101:3306;
}
server{
listen3306;
proxy_passmysql_socket;
}
}
此时,我们就可以通过例如Navicat等客户端进行连接。
3.限制访问IP
实现了对连接的代理,所有人都可以通过访问Nginx来连接MySQL服务器,解决了外网无法连接的问题。
为了更进一步的缩小访问范围,保证数据安全,我们可以限制只有公司网络的IP地址可以通过Nginx进行连接。
Nginx提供了ngx_stream_access_module模块,其指令非常简单,仅包含allow和deny指令。
1)allow
该指令设置指定的IP允许访问。可以和deny指令配合使用
作用域:stream, server
语法:allow address | CIDR | unix: | all;
示例:
#允许192.168.110.1访问 allow192.168.110.1; #允许192.168.110.1到192.168.255.254 allow192.168.110.0/16; #允许192.168.110.1到192.168.110.254 allow192.168.110.0/24; #允许所有的IP访问 allowall;
2)deny
该指令设置指定的IP禁止访问。可以和allow指令配合使用。
作用域:stream, server
语法:deny address | CIDR | unix: | all;
#禁止192.168.110.1访问 deny192.168.110.1; #禁止192.168.110.1到192.168.255.254 deny192.168.110.0/16; #禁止192.168.110.1到192.168.110.254 deny192.168.110.0/24; #禁止所有的IP访问 denyall;
3)配置示例
禁止所有的IP访问,192.168.110.100除外。
allow192.168.110.100; denyall;
Tips:如果指定了allow,需要配合deny使用,否则就是允许所有的IP地址访问。
4.综合案例
只允许192.168.110.100通过Nginx连接MySQL服务器。
stream{
allow192.168.110.100;
denyall;
server{
listen3306;
proxy_pass192.168.110.101:3306;
}
}
审核编辑:汤梓红
-
服务器
+关注
关注
13文章
10094浏览量
90880 -
HTTP
+关注
关注
0文章
531浏览量
34851 -
虚拟主机
+关注
关注
0文章
72浏览量
11836 -
MySQL
+关注
关注
1文章
897浏览量
29230 -
nginx
+关注
关注
0文章
180浏览量
12967
原文标题:Nginx 代理 MySQL 连接,并限制可访问IP
文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
本地LabVIEW访问远程mysql
【NanoPi NEO试用体验】之安装配置Nginx环境WEB网站详解
NanoPi NEO - 可靠的Nginx 网络服务器
看看nginx的连接频率limit_conn_module和请求频率limit_req_module限制模块
配置Nginx访问日志
nginx使用学习之正、反向代理
Nginx的配置文件如何设置头信息保留真实IP不丢失
如何通过Nginx实现禁止国外IP访问网站

如何用Nginx代理MySQL连接并限制可访问IP
评论