場(chǎng)景:
訪問UAT環(huán)境,只能使用客戶電腦訪問,太難用了,于是就需要在自己電腦上跑代碼,通過客戶電腦中轉(zhuǎn)來訪問uat環(huán)境的數(shù)據(jù)庫(kù)。
選用nginx進(jìn)行轉(zhuǎn)發(fā)。配置如下:
stream {
upstream cloudsocket {
hash $remote_addr consistent;
server 192.168.182.155:3306 weight=5 max_fails=3 fail_timeout=30s;
}
server {
listen 3306;#數(shù)據(jù)庫(kù)服務(wù)器監(jiān)聽端口
proxy_connect_timeout 10s;
proxy_timeout 300s;#設(shè)置客戶端和代理服務(wù)之間的超時(shí)時(shí)間,如果5分鐘內(nèi)沒操作將自動(dòng)斷開。
proxy_pass cloudsocket;
}
}
重啟。
訪問nginx所在機(jī)器的ip和配置的3306端口,輸入賬號(hào)密碼,就可以轉(zhuǎn)發(fā)mysql連接了。
注意 stream和http是同級(jí)別的,不要放入http里面。
原理,查了一頓,沒整明白,以后有時(shí)間在研究。
只有一點(diǎn)點(diǎn):
nginx從1.9.0開始,新增加了一個(gè)stream模塊,用來實(shí)現(xiàn)四層協(xié)議的轉(zhuǎn)發(fā)、代理或者負(fù)載均衡等。比如在內(nèi)網(wǎng)有一個(gè)mysql服務(wù),想暴露到公網(wǎng)上去使用,就可以通過nginx代理的方式通過nginx來進(jìn)行內(nèi)網(wǎng)mysql的訪問。