Nginx 代理 MySQL 连接

21 篇文章 6 订阅

Nginx 代理 MySQL 连接

原文地址:https://mp.weixin.qq.com/s/sd_u6R7eLeUOsCynu771cw

1. 前言

本次测试目的:

  • 使用 Nginx 机器当做跳板机,外部机器通过 Nginx 机器连接到 mysql 数据库并进行操作。
  • 在 nginx 中配置内容进行访问限制。

要求:

  • 一台服务器并安装Nginx,且与MySQL服务器处于一个内网之中,内网之间可以访问。

2. 部署 Nginx,MySQL

👉 部署 nginx

参考连接:Nginx

部署要求:

  • 需要用到ngx_stream_core_module模块,该模块不是默认构建的,需要在configure时添加--with-stream来进行构建
  • 示例:./configure --with-stream

👉 部署 mysql

参考连接:MySQL

3. ngx_stream_core_module 配置方式

3.1 stream

该指令定义了stream服务器。与http块平级,定义在main块中。

  • 作用域:main
  • 语法格式:
 stream {
     server {
         ......
     }
 }

3.2 server

该指令定义一个虚拟主机,与http块中的server类似。我们可以在stream块中定义多个server块。

  • 作用域:stream
  • 语法格式:
stream {
     server {
         ......
     }
     server {
         ......
     }
 }

3.3 listen

该指令定义虚拟主机server要监听的socket的地址和端口。

  • 作用域:server
  • 语法格式:listen address:port;
listen 127.0.0.1:3306;
listen *:3306;

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

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

在这里插入图片描述

4. 限制访问 IP

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

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

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

4.1 allow

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

  • 作用域:stream, server
  • 语法:allow address | CIDR | unix: | all;
  • 示例
 # 允许192.168.137.1访问
 allow 192.168.137.1;
 
 # 允许192.168.137.1到192.168.255.254
 allow 192.168.137.0/16;
 
 # 允许192.168.137.1到192.168.137.254
 allow 192.168.137.0/24;
 
 # 允许所有的IP访问
 allow all;

4.2 deny

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

  • 作用域:stream, server
  • 语法:deny address | CIDR | unix: | all;
  • 示例
# 禁止192.168.137.1访问
 deny 192.168.137.1;
 
 # 禁止192.168.137.1到192.168.255.254
 deny 192.168.137.0/16;
 
 # 禁止192.168.137.1到192.168.137.254
 deny 192.168.137.0/24;
 
 # 禁止所有的IP访问
 deny all;

4.3 配置示例

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

allow 192.168.137.102;
deny all;

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

5. 综合案例

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

stream  {
     allow 192.168.137.102;
     deny all;
     server {
         listen 3306;
         proxy_pass 192.168.137.130:3306;
     }
 }

在这里插入图片描述

 
 
 
 
 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值