1.前言
我們的生產(chǎn)環(huán)境基本上都部署在云服務(wù)器上,例如應(yīng)用服務(wù)器、MySQL服務(wù)器等。如果MySQL服務(wù)器直接暴露在公網(wǎng),就會(huì)存在很大的風(fēng)險(xiǎn),為了保證數(shù)據(jù)安全,MySQL服務(wù)器的端口是不對(duì)外開(kāi)放的。
好巧不巧,線上業(yè)務(wù)遇到bug了,開(kāi)發(fā)的小伙伴需要遠(yuǎn)程連接MySQL來(lái)查看數(shù)據(jù),那應(yīng)該怎么辦呢?
我們可以通過(guò)Nginx代理(“跳板機(jī)”)來(lái)進(jìn)行連接。
2.Nginx代理連接
要實(shí)現(xiàn)對(duì)連接的代理轉(zhuǎn)發(fā),我們需要一臺(tái)服務(wù)器并安裝Nginx,且與MySQL服務(wù)器處于一個(gè)內(nèi)網(wǎng)之中,內(nèi)網(wǎng)之間可以訪問(wèn)。
其次,我們需要用到ngx_stream_core_module模塊,該模塊不是默認(rèn)構(gòu)建的,我們需要在configure時(shí)添加--with-stream來(lái)進(jìn)行構(gòu)建。
既然要用到ngx_stream_core_module模塊,先看看其提供的指令,我們才知道怎么來(lái)進(jìn)行配置。
1)stream
該指令定義了stream服務(wù)器。與http塊平級(jí),定義在main塊中。
作用域:main
語(yǔ)法:stream {...}
示例:
stream{ server{ ...... } }
2)server
該指令定義一個(gè)虛擬主機(jī),與http塊中的server類(lèi)似。我們可以在stream塊中定義多個(gè)server塊。
作用域:stream
語(yǔ)法:server {...}
stream{ server{ ...... } server{ ...... } }
3)listen
該指令定義虛擬主機(jī)server要監(jiān)聽(tīng)的socket的地址和端口。
作用域:server
語(yǔ)法:listen address:port;
示例:
listen127.0.0.1:3306; listen*:3306; #效果與listen*:3306一樣 listen3306; listenlocalhost:3306;
4)配置示例
MySQL服務(wù)器,端口3306(單機(jī)環(huán)境)
stream{ server{ listen3306; proxy_pass192.168.110.101:3306; } }
MySQL服務(wù)器,端口3306(集群環(huán)境)
stream{ upstreammysql_socket{ server192.168.110.101:3306; } server{ listen3306; proxy_passmysql_socket; } }
此時(shí),我們就可以通過(guò)例如Navicat等客戶端進(jìn)行連接。
3.限制訪問(wèn)IP
實(shí)現(xiàn)了對(duì)連接的代理,所有人都可以通過(guò)訪問(wèn)Nginx來(lái)連接MySQL服務(wù)器,解決了外網(wǎng)無(wú)法連接的問(wèn)題。
為了更進(jìn)一步的縮小訪問(wèn)范圍,保證數(shù)據(jù)安全,我們可以限制只有公司網(wǎng)絡(luò)的IP地址可以通過(guò)Nginx進(jìn)行連接。
Nginx提供了ngx_stream_access_module模塊,其指令非常簡(jiǎn)單,僅包含allow和deny指令。
1)allow
該指令設(shè)置指定的IP允許訪問(wèn)??梢院蚫eny指令配合使用
作用域:stream, server
語(yǔ)法:allow address | CIDR | unix: | all;
示例:
#允許192.168.110.1訪問(wèn) allow192.168.110.1; #允許192.168.110.1到192.168.255.254 allow192.168.110.0/16; #允許192.168.110.1到192.168.110.254 allow192.168.110.0/24; #允許所有的IP訪問(wèn) allowall;
2)deny
該指令設(shè)置指定的IP禁止訪問(wèn)??梢院蚢llow指令配合使用。
作用域:stream, server
語(yǔ)法:deny address | CIDR | unix: | all;
#禁止192.168.110.1訪問(wèn) deny192.168.110.1; #禁止192.168.110.1到192.168.255.254 deny192.168.110.0/16; #禁止192.168.110.1到192.168.110.254 deny192.168.110.0/24; #禁止所有的IP訪問(wèn) denyall;
3)配置示例
禁止所有的IP訪問(wèn),192.168.110.100除外。
allow192.168.110.100; denyall;
Tips:如果指定了allow,需要配合deny使用,否則就是允許所有的IP地址訪問(wèn)。
4.綜合案例
只允許192.168.110.100通過(guò)Nginx連接MySQL服務(wù)器。
stream{ allow192.168.110.100; denyall; server{ listen3306; proxy_pass192.168.110.101:3306; } }
審核編輯:湯梓紅
-
服務(wù)器
+關(guān)注
關(guān)注
13文章
9994瀏覽量
90063 -
HTTP
+關(guān)注
關(guān)注
0文章
530瀏覽量
34423 -
虛擬主機(jī)
+關(guān)注
關(guān)注
0文章
71瀏覽量
11800 -
MySQL
+關(guān)注
關(guān)注
1文章
890瀏覽量
28859 -
nginx
+關(guān)注
關(guān)注
0文章
180瀏覽量
12857
原文標(biāo)題:Nginx 代理 MySQL 連接,并限制可訪問(wèn)IP
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
本地LabVIEW訪問(wèn)遠(yuǎn)程mysql
【NanoPi NEO試用體驗(yàn)】之安裝配置Nginx環(huán)境WEB網(wǎng)站詳解
NanoPi NEO - 可靠的Nginx 網(wǎng)絡(luò)服務(wù)器
看看nginx的連接頻率limit_conn_module和請(qǐng)求頻率limit_req_module限制模塊
如何徹底搞懂Nginx知識(shí)網(wǎng)結(jié)構(gòu)

配置Nginx訪問(wèn)日志
如何提高Mysql數(shù)據(jù)庫(kù)的訪問(wèn)瓶頸

nginx使用學(xué)習(xí)之正、反向代理

Nginx的配置文件如何設(shè)置頭信息保留真實(shí)IP不丟失
如何通過(guò)Nginx實(shí)現(xiàn)禁止國(guó)外IP訪問(wèn)網(wǎng)站

評(píng)論