共计 2197 个字符,预计需要花费 6 分钟才能阅读完成。
起源: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 开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞 + 转发哦!