Nginx 代理 MySQL 连接,并限制可访问IP

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;

示例:

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等客户端进行连接。

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访问
 allow 192.168.110.1;
 
 # 允许192.168.110.1到192.168.255.254
 allow 192.168.110.0/16;
 
 # 允许192.168.110.1到192.168.110.254
 allow 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.254
 deny 192.168.110.0/16;
 
 # 禁止192.168.110.1到192.168.110.254
 deny 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地址访问。

4.综合案例

只允许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://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/9563

(0)
郭靖的头像郭靖
上一篇 2023年8月17日 下午5:35
下一篇 2023年8月22日 下午10:35

相关推荐

  • ThinkPHP 出现“您浏览的页面暂时发生了异常!请稍后再试~”的解决方法

    ThinkPHP3.0 第一次运行入口文件,之后在修改Action只要是有数据库操作,就会出现“您浏览的页面暂时发生了错误!请稍后再试~”的系统提示错误。 解决办法是: 把项目里自动生成的runtime文件夹下~runtime.php文件删掉,再刷新浏览器页面就会正常显示数据库提取的信息

    2024年2月28日
    2.2K00
  • 宝塔 shell 命令 自动重启nginx

    宝塔搭建网站,nginx总是意外宕机,可以通过宝塔计划任务定时重启服务 直接在计划任务里添下,Shell脚本如上图 代码如下 /etc/init.d/nginx restart 时间自己设定就可以 附上重启其它服务的命令 重启Mysql /etc/init.d/mysqld restart 重启PHP (根据安装PHP版本号做更改,例如:/etc/init.…

    2023年6月25日
    1.7K00
  • IIS7 伪静态 web.config 配置方法【详解】

    IIS7 做伪静态比较的简单方便   1.程序方面 只需要设置web.config 就可以了。 2.服务器需要安装:URL Rewrite 下载地址:http://www.iis.net/download/URLRewrite Godaddy 的主机已经安装这个插件。 本地在测试的时候 请查看自己是否安装这个插件。 注意要点 1.参数用“()” 括…

    2023年10月24日
    1.9K00
  • WordPress无法上传图片、文件(服务器找不到上传的图片文件)

    前言 昨天写了一张文章,发现无法上传特色图片。 上传图片显示如下: 我们复制图片路径的URL,此时出现404问题 根本没有12月份的路径 重点: 为了这个问题我解决了一上午。 网上的大多数方法就是给uploads设置权限,但是我的权限已经是755了,而且是nginx的属主和属组,应该不是权限问题 分析问题 调试模式出现404,说明服务器基本上没有上…

    2023年3月24日
    1.2K00
  • OpenSSL自签证书生成

    一 背景 我们的mqtt broker服务,使用了SSL自签证书,可以提高mqtt连接安全性。 二 生成自签证书 在Centos7下生成,有效时长:100年

    2023年3月9日
    1.1K00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信