起源:toutiao.com/article/7234104886726705716

1.前言

咱们的生产环境基本上都部署在云服务器上,例如应用服务器、MySQL服务器等。如果MySQL服务器间接裸露在公网,就会存在很大的危险,为了保障数据安全,MySQL服务器的端口是不对外开放的。

好巧不巧,线上业务遇到bug了,开发的小伙伴须要近程连贯MySQL来查看数据,那应该怎么办呢?

咱们能够通过Nginx代理(“跳板机”)来进行连贯。

举荐一个开源收费的 Spring Boot 实战我的项目:

https://github.com/javastacks/spring-boot-best-practice

2.Nginx代理连贯

要实现对连贯的代理转发,咱们须要一台服务器并装置Nginx,且与MySQL服务器处于一个内网之中,内网之间能够拜访。

其次,咱们须要用到ngx_stream_core_module模块,该模块不是默认构建的,咱们须要在configure时增加--with-stream来进行构建。

增加过程能够参照【Nginx根本命令&不停机版本升级】一文进行,咱们这里不再赘述。

既然要用到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;     } }

近期热文举荐:

1.1,000+ 道 Java面试题及答案整顿(2022最新版)

2.劲爆!Java 协程要来了。。。

3.Spring Boot 2.x 教程,太全了!

4.别再写满屏的爆爆爆炸类了,试试装璜器模式,这才是优雅的形式!!

5.《Java开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞+转发哦!