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

 更新时间:2026年07月29日 09:36:08   作者:代码小侦探  
还在为云服务器上MySQL端口.暴露的安全问题发愁?本文教你如何利用Nginx代理(跳板机)实现安全的远程连接,通过ngx_stream_core_module模块转发请求,并配合IP白名单限制访问,确保只有授权IP能连接数据库,轻松提升数据安全性

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范围,从而提高数据的安全性。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Nginx 499错误问题及解决办法

    Nginx 499错误问题及解决办法

    Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器,接下来通过本文给大家介绍Nginx 499错误问题及解决办法,一起看看吧
    2016-06-06
  • 如何利用nginx做代理缓存浅析

    如何利用nginx做代理缓存浅析

    Nginx缓存主要是用于减轻后端服务器的负载,提高网站并发量,提升用户体验度,下面这篇文章主要给大家介绍了关于如何利用nginx做代理缓存的相关资料,需要的朋友可以参考下
    2021-12-12
  • 详解Keepalived+Nginx实现高可用(HA)

    详解Keepalived+Nginx实现高可用(HA)

    这篇文章主要介绍了详解Keepalived+Nginx实现高可用(HA),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • Nginx中map指令的具体使用

    Nginx中map指令的具体使用

    Nginx的map指令是一个强大的工具,用于根据变量的值来设置另一个变量的值,本文就来介绍一下Nginx中map指令的具体使用,感兴趣的可以了解一下
    2024-07-07
  • Centos基于Nginx搭建RTMP服务器的实现

    Centos基于Nginx搭建RTMP服务器的实现

    本文主要介绍了Centos基于Nginx搭建RTMP服务器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-07-07
  • Nginx中roxy_set_header与add_header区别举例浅析

    Nginx中roxy_set_header与add_header区别举例浅析

    proxy_set_header是一个 Nginx 配置指令,用于设置将要转发到后端服务器的 HTTP 请求头,这篇文章主要给大家介绍了关于Nginx中roxy_set_header与add_header区别的相关资料,需要的朋友可以参考下
    2024-04-04
  • windows下快速安装nginx并配置开机自启动的方法

    windows下快速安装nginx并配置开机自启动的方法

    这篇文章主要介绍了windows下快速安装nginx 并配置开机自启动的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • Nginx中虚拟主机的三种配置方式详解

    Nginx中虚拟主机的三种配置方式详解

    本文将深入探讨如何通过 Nginx 实现基于域名、端口、IP 地址的多站点部署,覆盖从基础配置到高阶实战的完整路径,并结合 Java 应用场景提供可运行的示例代码,帮助你构建一个稳定、可扩展、安全的多站点服务架构
    2026-07-07
  • nginx自定义变量与内置预定义变量的使用

    nginx自定义变量与内置预定义变量的使用

    这篇文章主要介绍了nginx自定义变量与内置预定义变量的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • nginx全局块的user指令的实现示例

    nginx全局块的user指令的实现示例

    user用于配置运行Nginx服务器的worker进程的用户和用户组,本文主要介绍了nginx全局块的user指令的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07

最新评论