Nginx 代理 MySQL 連接,并限制可訪問IP

admin Nginx評論684字數(shù) 1877閱讀模式

Nginx 代理 MySQL 連接,并限制可訪問IP

1.前言

我們的生產(chǎn)環(huán)境基本上都部署在云服務(wù)器上,例如應(yīng)用服務(wù)器、MySQL服務(wù)器等。如果MySQL服務(wù)器直接暴露在公網(wǎng),就會存在很大的風險,為了保證數(shù)據(jù)安全,MySQL服務(wù)器的端口是不對外開放的。 好巧不巧,線上業(yè)務(wù)遇到bug了,開發(fā)的小伙伴需要遠程連接MySQL來查看數(shù)據(jù),那應(yīng)該怎么辦呢? 我們可以通過Nginx代理(“跳板機”)來進行連接。文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

2.Nginx代理連接

要實現(xiàn)對連接的代理轉(zhuǎn)發(fā),我們需要一臺服務(wù)器并安裝Nginx,且與MySQL服務(wù)器處于一個內(nèi)網(wǎng)之中,內(nèi)網(wǎng)之間可以訪問。 其次,我們需要用到ngx_stream_core_module模塊,該模塊不是默認構(gòu)建的,我們需要在configure時添加--with-stream來進行構(gòu)建。 既然要用到ngx_stream_core_module模塊,先看看其提供的指令,我們才知道怎么來進行配置。文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

1)stream 該指令定義了stream服務(wù)器。與http塊平級,定義在main塊中。文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

作用域:main文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

語法:stream {...}文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

示例:文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

 stream {
     server {
         ......
     }
 }

2)server文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

該指令定義一個虛擬主機,與http塊中的server類似。我們可以在stream塊中定義多個server塊。文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

作用域:stream文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

語法:server {...}文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

stream {
     server {
         ......
     }
     server {
         ......
     }
 }

3)listen文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

該指令定義虛擬主機server要監(jiān)聽的socket的地址和端口。文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

作用域:server文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

語法:listen address:port;文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

示例:文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

listen 127.0.0.1:3306;
 listen *:3306;
 # 效果與listen *:3306一樣
 listen 3306;
 listen localhost:3306;

4)配置示例文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

MySQL服務(wù)器,端口3306(單機環(huán)境)文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

stream  {
     server {
         listen 3306;
         proxy_pass 192.168.110.101:3306;
     }
 }

MySQL服務(wù)器,端口3306(集群環(huán)境)文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

stream  {
     upstream mysql_socket {
         server 192.168.110.101:3306;
     }
     server {
             listen 3306;
             proxy_pass mysql_socket;
     }
 }

此時,我們就可以通過例如Navicat等客戶端進行連接。文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

3.限制訪問IP

實現(xiàn)了對連接的代理,所有人都可以通過訪問Nginx來連接MySQL服務(wù)器,解決了外網(wǎng)無法連接的問題。文章源自網(wǎng)吧系統(tǒng)維護-http://www.strong-digital.cn/11015.html

為了更進一步的縮小訪問范圍,保證數(shù)據(jù)安全,我們可以限制只有公司網(wǎng)絡(luò)的IP地址可以通過Nginx進行連接。

Nginx提供了ngx_stream_access_module模塊,其指令非常簡單,僅包含allow和deny指令。

1)allow

該指令設(shè)置指定的IP允許訪問??梢院蚫eny指令配合使用

  • 作用域: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

該指令設(shè)置指定的IP禁止訪問??梢院蚢llow指令配合使用。

  • 作用域: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服務(wù)器。

stream  {
     allow 192.168.110.100;
     deny all;
     server {
         listen 3306;
         proxy_pass 192.168.110.101:3306;
     }
 }
版權(quán)聲明:文章圖片資源來源于網(wǎng)絡(luò),如有侵權(quán),請留言刪除!!!
廣告也精彩
admin
  • 本文由 發(fā)表于 2023年8月17日 07:14:48
  • 轉(zhuǎn)載請務(wù)必保留本文鏈接:http://www.strong-digital.cn/11015.html
匿名

發(fā)表評論

匿名網(wǎng)友 填寫信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: