当前位置: 代码网 > it编程>数据库>Mysql > Nginx代理MySQL并限制IP访问怎么配置?详细步骤解析

Nginx代理MySQL并限制IP访问怎么配置?详细步骤解析

2026年07月29日 Mysql 我要评论
1、前言在生产环境中,我们的应用服务器、mysql服务器等通常都部署在云服务器上。为了数据安全,mysql服务器的端口一般不会对外开放,因为直接暴露在公网会带来很大的风险。然而,线上业务出现bug时,

1、前言

在生产环境中,我们的应用服务器、mysql服务器等通常都部署在云服务器上。为了数据安全,mysql服务器的端口一般不会对外开放,因为直接暴露在公网会带来很大的风险。然而,线上业务出现bug时,开发人员需要远程连接mysql来查看数据。这时,我们可以通过nginx代理(俗称“跳板机”)来实现安全连接。

2、nginx代理连接

要实现对mysql连接的代理转发,我们需要一台安装了nginx的服务器,并且这台服务器要与mysql服务器处于一个内网中,以便它们之间可以相互访问。此外,我们还需要用到ngx_stream_core_module模块,该模块不是默认构建的,需要在nginx配置时添加--with-stream选项来进行构建。

2.1 指令介绍

1)stream

  • 作用:定义stream服务器,与http块平级,定义在main块中。
  • 作用域:main
  • 语法stream {...}
  • 示例
stream {
    # 配置内容
}

2)server

  • 作用:定义一个虚拟主机,与http块中的server类似。可以在stream块中定义多个server块。
  • 作用域:stream
  • 语法server {...}
  • 示例
stream {
    server {
        # 配置内容
    }
}

3)listen

  • 作用:定义虚拟主机server要监听的socket的地址和端口。
  • 作用域:server
  • 语法listen address:port;
  • 示例
stream {
    server {
        listen 127.0.0.1:3306;
        # 其他配置
    }
}

2.2 配置示例

假设我们的mysql服务器ip为192.168.110.101,端口为3306

单机环境配置

stream {
    server {
        listen 3306;
        proxy_pass 192.168.110.101:3306;
    }
}

集群环境配置(假设有多个mysql实例)

这里只是一个示例,实际配置可能需要根据具体的负载均衡策略来调整。

stream {
    upstream mysql_cluster {
        server 192.168.110.101:3306;
        server 192.168.110.102:3306;
        # 更多服务器...
    }

    server {
        listen 3306;
        proxy_pass mysql_cluster;
    }
}

配置完成后,我们就可以通过例如navicat等客户端连接到nginx的3306端口,由nginx代理连接到mysql服务器。

3、限制访问ip

实现了连接代理后,任何人只要能访问nginx就能连接mysql服务器。为了更进一步缩小访问范围,保证数据安全,我们可以限制只有公司网络的ip地址可以通过nginx进行连接。

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

3.1 指令介绍

1)allow

  • 作用:设置指定的ip允许访问。可以和deny指令配合使用。
  • 作用域:stream, server
  • 语法allow address | cidr | unix: | all;
  • 示例
# 允许192.168.110.1访问
allow 192.168.110.1;

# 允许192.168.110.0/16网段的ip访问
allow 192.168.110.0/16;

# 允许所有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.0/16网段的ip访问
deny 192.168.110.0/16;

# 禁止所有ip访问
deny all;

3.2 配置示例

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

stream {
    allow 192.168.110.100;
    deny all;

    server {
        listen 3306;
        proxy_pass 192.168.110.101:3306;
    }
}

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

4、综合案例

只允许192.168.110.100通过nginx连接mysql服务器。

nginx配置

stream {
    allow 192.168.110.100;
    deny all;

    server {
        listen 3306;
        proxy_pass 192.168.110.101:3306;
    }
}

运行结果

配置前

  • 从任意ip尝试连接nginx的3306端口,都能成功连接到mysql服务器。

配置后

  • 只有从192.168.110.100这个ip尝试连接nginx的3306端口时,才能成功连接到mysql服务器。
  • 从其他ip尝试连接时,会被nginx拒绝。

通过这样的配置,我们可以有效地控制能够访问mysql服务器的ip范围,从而提高数据的安全性。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com