使用Nginx代理MySQL連接并限制可訪問IP配置
1.前言
我們的生產(chǎn)環(huán)境基本上都部署在云服務器上,例如應用服務器、MySQL服務器等。如果MySQL服務器直接暴露在公網(wǎng),就會存在很大的風險,為了保證數(shù)據(jù)安全,MySQL服務器的端口是不對外開放的。
好巧不巧,線上業(yè)務遇到bug了,開發(fā)的小伙伴需要遠程連接MySQL來查看數(shù)據(jù),那應該怎么辦呢?
我們可以通過Nginx代理(“跳板機”)來進行連接。
推薦一個開源免費的 Spring Boot 實戰(zhàn)項目:
https://github.com/javastacks/spring-boot-best-practice
2.Nginx代理連接
要實現(xiàn)對連接的代理轉(zhuǎn)發(fā),我們需要一臺服務器并安裝Nginx,且與MySQL服務器處于一個內(nèi)網(wǎng)之中,內(nèi)網(wǎng)之間可以訪問。
其次,我們需要用到ngx_stream_core_module
模塊,該模塊不是默認構(gòu)建的,我們需要在configure時添加--with-stream
來進行構(gòu)建。
添加過程可以參照【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要監(jiān)聽的socket的地址和端口。
- 作用域:server
- 語法:listen address:port;
示例:
listen 127.0.0.1:3306; listen *:3306; # 效果與listen *:3306一樣 listen 3306; listen localhost:3306;
4)配置示例
MySQL服務器,端口3306(單機環(huán)境)
stream { server { listen 3306; proxy_pass 192.168.110.101:3306; } }
MySQL服務器,端口3306(集群環(huán)境)
stream { upstream mysql_socket { server 192.168.110.101:3306; } server { listen 3306; proxy_pass mysql_socket; } }
此時,我們就可以通過例如Navicat等客戶端進行連接。
3.限制訪問IP
實現(xiàn)了對連接的代理,所有人都可以通過訪問Nginx來連接MySQL服務器,解決了外網(wǎng)無法連接的問題。
為了更進一步的縮小訪問范圍,保證數(shù)據(jù)安全,我們可以限制只有公司網(wǎng)絡的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禁止訪問??梢院蚢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服務器。
stream { allow 192.168.110.100; deny all; server { listen 3306; proxy_pass 192.168.110.101:3306; } }
以上就是使用Nginx代理MySQL連接并限制可訪問IP的詳細內(nèi)容,更多關于Nginx代理MySQL連接的資料請關注腳本之家其它相關文章!
相關文章
Nginx出現(xiàn)403?Forbidden的幾種簡單解決方式
這篇文章主要介紹了Nginx出現(xiàn)403?Forbidden的幾種解決思路,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12關于nginx報錯405?not?allowed解決方法總結(jié)
這篇文章主要給大家介紹了關于nginx報錯405?not?allowed解決方法的相關資料,nginx遇到post請求靜態(tài)文件會得到405錯誤,文中通過代碼介紹的非常詳細,也給出了推薦方法,需要的朋友可以參考下2023-10-10Nginx中roxy_set_header與add_header區(qū)別舉例淺析
proxy_set_header是一個 Nginx 配置指令,用于設置將要轉(zhuǎn)發(fā)到后端服務器的 HTTP 請求頭,這篇文章主要給大家介紹了關于Nginx中roxy_set_header與add_header區(qū)別的相關資料,需要的朋友可以參考下2024-04-04