來源:toutiao.com/article/7234104886726705716 ## 1.前言 我們的生產環境基本上都部署在雲伺服器上,例如應用伺服器、MySQL伺服器等。如果MySQL伺服器直接暴露在公網,就會存在很大的風險,為了保證數據安全,MySQL伺服器的埠是不對外開放的。 好巧不巧 ...
來源:toutiao.com/article/7234104886726705716
1.前言
我們的生產環境基本上都部署在雲伺服器上,例如應用伺服器、MySQL伺服器等。如果MySQL伺服器直接暴露在公網,就會存在很大的風險,為了保證數據安全,MySQL伺服器的埠是不對外開放的。
好巧不巧,線上業務遇到bug了,開發的小伙伴需要遠程連接MySQL來查看數據,那應該怎麼辦呢?
我們可以通過Nginx代理(“跳板機”)來進行連接。
推薦一個開源免費的 Spring Boot 實戰項目:
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最新版)
4.別再寫滿屏的爆爆爆炸類了,試試裝飾器模式,這才是優雅的方式!!
覺得不錯,別忘了隨手點贊+轉發哦!