nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > Nginx代理MySQL并限制IP访问配置

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

作者:代码小侦探

还在为云服务器上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 {
    # 配置内容
}

2)server

stream {
    server {
        # 配置内容
    }
}

3)listen

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

# 允许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

# 禁止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;
    }
}

运行结果

配置前

配置后

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

总结

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

您可能感兴趣的文章:
阅读全文