Redian新闻
>
Nginx 代理 MySQL 连接,并限制可访问IP

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

公众号新闻


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.1192.168.255.254
 allow 192.168.110.0/16;
 
 # 允许192.168.110.1192.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.1192.168.255.254
 deny 192.168.110.0/16;
 
 # 禁止192.168.110.1192.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;
     }
 }
链接:https://www.toutiao.com/article/7234104886726705716

(版权归原作者所有,侵删)


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
五类移六苗注重磅 |《开源数据库生态发展研究报告》发布 GreatSQL为MySQL5.7最佳替代方案!4 种 MySQL 同步 ES 方案MySQL中update“经典”的坑,这样写语句,直接劝退!为什么不建议在 Docker 中跑 MySQL ?阿里:MySQL 单表数据最大不要超过多少行?为什么?生产环境遇到MySQL数据页损坏问题如何解决?Graduation弃用 MySQL 后存储成本降低 85%,携程业务系统数据库升级技术实践Nginx 代理 MySQL 连接,并限制可访问 IPMySQL 不一样的 NULL一文了解MySQL全新版本模型MySQL 运维常用脚本MySQL binlog 三个典型的业务应用场景那些MySQL 8.0中的隐藏特性MySQL 之父:不要把一个优秀的开发者提升为管理者,那会是种资源浪费Redis和MySQL双写一致性如何保证?这个方案够优雅!SQL骚操作,一条SQL 统计近 7天、30天、全部的订单量技术同学必会的MySQL设计规约,都是惨痛的教训MySQL 被 PG 干翻了。。刚刚!香港开启抢人计划,澳洲八大落地即是香港人?全球百强名校限制可能放宽,澳洲留学生有福了!狂揽13k star,开源版代码解释器登顶GitHub热榜,可本地运行、可访问互联网MySQL 巨坑:永远不要在 MySQL 中使用 UTF-8!!MyBatis 动态 SQL 最全教程,这样写 SQL 太爽了!VLDB顶会论文解读 | PolarDB MySQL高性能强一致集群核心技术详解沉默基因MySQL 单表数据最大不要超过多少行?为什么?用雪花 id 和 uuid 做 MySQL 主键,被领导怼了如何玩转nginx正反向代理Blindspot mysterious tattooed woman found naked inside a travelMySQL 之父,和 Amazon、科大讯飞、宝洁、字节、用友等企业专家齐聚深圳 ArchSummit 架构师峰会!硬核观察 #1037 PostgreSQL 超过 MySQL 成为开发者首选数据库MySQL 调整版本控制模型,发布首个创新版本 8.1.0我们是大唐盛世 第二十四章 新的康复之旅为什么Uber的底层存储从Postgres换成MySQL了?
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。