文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-01 14:51

关注

我们的生产环境基本上都部署在云服务器上,例如应用服务器、MySQL服务器等。如果MySQL服务器直接暴露在公网,就会存在很大的风险,为了保证数据安全,MySQL服务器的端口是不对外开放的。

好巧不巧,线上业务遇到bug了,开发的小伙伴需要远程连接MySQL来查看数据,那应该怎么办呢?

我们可以通过Nginx代理(“跳板机”)来进行连接。

要实现对连接的代理转发,我们需要一台服务器并安装Nginx,且与MySQL服务器处于一个内网之中,内网之间可以访问。

其次,我们需要用到ngx_stream_core_module模块,该模块不是默认构建的,我们需要在configure时添加--with-stream来进行构建。

添加过程可以参照【Nginx基本命令&不停机版本升级】一文进行,我们这里不再赘述。

既然要用到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;

示例:

listen 127.0.0.1:3306;listen *:3306;# 效果与listen *:3306一样listen 3306;listen localhost:3306;

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;    }}

此时,我们就可以通过例如Navicat等客户端进行连接。

实现了对连接的代理,所有人都可以通过访问Nginx来连接MySQL服务器,解决了外网无法连接的问题。

为了更进一步的缩小访问范围,保证数据安全,我们可以限制只有公司网络的IP地址可以通过Nginx进行连接。

Nginx提供了ngx_stream_access_module模块,其指令非常简单,仅包含allowdeny指令。

1)allow

该指令设置指定的IP允许访问。可以和deny指令配合使用

作用域:stream, server

语法:allow address | CIDR | unix: | all;

示例:

# 允许192.168.110.1访问allow 192.168.110.1;# 允许192.168.110.1到192.168.255.254allow 192.168.110.0/16;# 允许192.168.110.1到192.168.110.254allow 192.168.110.0/24;# 允许所有的IP访问allow all;

2)deny

该指令设置指定的IP禁止访问。可以和allow指令配合使用。

作用域:stream, server

语法:deny address | CIDR | unix: | all;

# 禁止192.168.110.1访问deny 192.168.110.1;# 禁止192.168.110.1到192.168.255.254deny 192.168.110.0/16;# 禁止192.168.110.1到192.168.110.254deny 192.168.110.0/24;# 禁止所有的IP访问deny all;

3)配置示例

禁止所有的IP访问,192.168.110.100除外。

allow 192.168.110.100;deny all;

🔔Tips:如果指定了allow,需要配合deny使用,否则就是允许所有的IP地址访问。

只允许192.168.110.100通过Nginx连接MySQL服务器。

stream  {    allow 192.168.110.100;    deny all;    server {        listen 3306;        proxy_pass 192.168.110.101:3306;    }}

来源地址:https://blog.csdn.net/weixin_43834401/article/details/130748711

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯