首页 > 数据库 >Nginx 代理 MySQL 连接,并限制可访问IP

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

时间:2023-08-15 15:39:03浏览次数:42  
标签:deny stream IP 192.168 server Nginx allow MySQL 3306

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

标签:deny,stream,IP,192.168,server,Nginx,allow,MySQL,3306
From: https://blog.51cto.com/u_64214/7089202

相关文章

  • Nginx+Promtail+Loki+Grafana Nginx日志展示
    最近客户有个新需求,就是想查看网站的访问情况,由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的页面,咱也做不到成熟的日志解决方案,那就是ELK,还有现在比较火的Loki,(当然还有很多其他解决方案,比如Splunk、Datad......
  • H3C F1000-AI与山石AX520S对接IPsecVPN
    总部由于之前防火墙出过几次问题,于是最近规划更换防火墙,把从原先的H3C墙换成山石墙,换完以后那几天vpn连接就有点不稳定,偶尔会有丢包,但是访问业务还算正常,但是就在那天下午我和总部之间分别加了一条感兴趣流,让某个业务系统可以相互访问,然而在第二天使用VPN连接的业务便开始出现大量......
  • docker 安装nginx
    https://www.cnblogs.com/jolins/p/17452694.html 第7步运行这个dockerrun\-p80:80\-p81:81\-p443:443\--namenginx\--restart=always\-v/usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf\-v/usr/local/nginx/conf/cert:/etc/nginx/certs\-v/usr......
  • MySQL的空间索引
    空间索引是一种特殊的数据库索引,用于存储空间数据并加速空间查询。空间数据通常是指与地理位置或空间坐标有关的数据,如经度和纬度、多边形边界、点等。空间索引的目的是快速查找在特定地理区域内或与特定地理形状相交的对象。以下是空间索引的一些核心概念和特点......
  • JavaScript 如何封装一些常见的函数来提高工作效率
    前言为什么要封装函数JavaScript封装函数的主要目的是为了保护代码的安全性和可维护性。封装可以隐藏实现细节:将函数内部的实现细节封装起来,只暴露给外部必要的接口,可以使代码更加安全,防止意外修改或者滥用。封装可以提高代码的可维护性:将功能模块封装成函数,可以使代码更加模......
  • nginx 常见参数以及重定向参数配置(摘抄)
    1、参考nginx常见参数以及重定向参数配置2、nginx各参数翻译,作用$arg_PARAMETER#这个变量包含GET请求中,如果有变量PARAMETER时的值。$args#这个变量等于请求行中(GET请求)的参数,例如foo=123&bar=blahblah;$binary_remote_addr#二进制的客户地址。$body_bytes_sent......
  • 安装, 卸载, 设置MySQL
    最近老是在用不同的电脑,"怎么装卸MySQL"成了一个问题,所以做个笔记MySQL下载地址: MySQL::DownloadMySQLInstaller我下载的是安装器,感觉顺着安装器走很方便,zip的话还得设置一些东西然后按照图示安装可以开navicat连一下试试,看能不能用了MySQL的卸载也很麻烦......
  • MySQL什么情况下应该建单列索引?什么情况下应该建组合索引?
    假设有一张用户表,姓名和创建时间是用来查询最多的字段,如果要建索引,是单独给姓名、创建时间来建单列索引好?还是给它们建组合索引好? 其实决定为MySQL表中的字段创建单列索引还是组合索引需要考虑你的查询模式和需求。下面是一些建议:单列索引vs.组合索引单列......
  • docker容器部署mysql主从集群
    第一步先将mysql镜像从dockerhub拉取到本地dockerpullmysql:5.7第二步为了避免容器出现问题后导致数据丢失,我们通常需要创建容器的数据卷,通过启动时创建volume让数据存放在本地中。创建volume目录mkdir-p/mysql_master/logmkdir-p/mysql_master/datamkdir-p/mysql_maste......
  • linux安装Nginx
    1.离线安装rpm-qa|grep"gcc" 或者yumlistinstalled|grep"gcc"查看是否安装第一步:gcc依赖下载镜像地址:官网:https://gcc.gnu.org/releases.html阿里云镜像站:http://mirrors.aliyun.com/centos/7/os/x86_64/Packages/CentOS镜像站点:https://vault.centos.org/7.5.1804/o......