調(diào)試一些接口的時(shí)候蚌父,網(wǎng)站應(yīng)用要跟一些外部服務(wù)進(jìn)行交流侠畔,你發(fā)給它一點(diǎn)數(shù)據(jù),它也會(huì)返回給你一點(diǎn)數(shù)據(jù)竿痰。但是如果是在本地開發(fā)環(huán)境上調(diào)試脆粥,你只能發(fā)送給外部服務(wù)數(shù)據(jù),而外部服務(wù)返回來的數(shù)據(jù)你的本地環(huán)境是收不到的影涉,如何做外網(wǎng)服務(wù)器訪問的請(qǐng)求轉(zhuǎn)發(fā)到本地呢变隔?
基本思路是使用SSH反向隧道,把運(yùn)行在本地的一個(gè)服務(wù)發(fā)布到互聯(lián)網(wǎng)上Linux服務(wù)器的一個(gè)本地端口蟹倾,然后再用nginx反向代理來把這個(gè)本地端口發(fā)布到互聯(lián)網(wǎng)弟胀。
我不想直接在服務(wù)器上去調(diào)試,因?yàn)閺?fù)雜而且不方便喊式,忽然想到了之前用過的BrowserSync工具,有一個(gè) Tunnel 選項(xiàng)萧朝,可以把在本地創(chuàng)建的服務(wù)器公布到互聯(lián)網(wǎng)上岔留。我又想到了 SSH 有個(gè) Tunnel 功能,原來用它作為本地電腦的代理用检柬,我想大概可以用它献联,讓我的在公網(wǎng)上的一臺(tái)服務(wù)器接待請(qǐng)求竖配,再把請(qǐng)求轉(zhuǎn)到我的本地開發(fā)環(huán)境上,然后就去搜索關(guān)鍵詞 NGINX里逆,SSH进胯,Tunnel ,找到了答案原押。
用 SSH 在本地電腦與公網(wǎng)服務(wù)器之間打開一個(gè)通道胁镐,配置公網(wǎng)服務(wù)器的NGINX,把收到的請(qǐng)求轉(zhuǎn)到本地電腦與公網(wǎng)服務(wù)器的這個(gè)通道上诸衔。
需求
- 一臺(tái)連接到公網(wǎng)的服務(wù)器盯漂。
- 公網(wǎng)服務(wù)器上安裝了 NGINX。
配置
- 先在公網(wǎng)服務(wù)器上添加一個(gè) NGINX 配置:
upstream tunnel {
server 127.0.0.1:7689;
}
server {
listen 80;
server_name dev.ninghao.net;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://tunnel;
}
}
上面用 NGINX 創(chuàng)建了一個(gè)代理笨农,如果有人訪問 dev.ninghao.net就缆,NGINX 會(huì)把請(qǐng)求轉(zhuǎn)給 tunnel,這個(gè) tunnel 指的就是這臺(tái)公網(wǎng)服務(wù)器谒亦,端口號(hào)是 7689竭宰,一會(huì)兒我們要用到這個(gè)端口跟本地電腦進(jìn)行通信。
通道
我們要在本地電腦與公網(wǎng)服務(wù)器之間份招,使用 SSH 打開一個(gè)通道切揭。要執(zhí)行的命令像這樣:
ssh -vnNT -R 服務(wù)器端口:localhost:本地端口 服務(wù)器用戶名@服務(wù)器 IP 地址
示例:
ssh -vnNT -R 7689:localhost:3000 root@42.120.40.68
在上面這個(gè)例子里,7689 指的是公網(wǎng)服務(wù)器的端口脾还,localhost 后面的 3000 是本地電腦用的端口伴箩。root 是登錄到公網(wǎng)服務(wù)器的用戶,42.120.40.68 是公網(wǎng)服務(wù)器的 IP 地址鄙漏。
因?yàn)槲覀兣渲昧斯W(wǎng)服務(wù)器的 NGINX嗤谚,訪問 dev.ninghao.net ,把請(qǐng)求轉(zhuǎn)到服務(wù)器上的 7689 端口怔蚌,這個(gè)端口跟我們的本地電腦上的 3000 端口是連接到一塊兒的巩步。所以,你在本地開發(fā)環(huán)境上搭建的服務(wù)器桦踊,應(yīng)該使用 3000 這個(gè)端口提供服務(wù)椅野。也就是,當(dāng)有人訪問 dev.ninghao.net 這個(gè)地址的時(shí)候籍胯,用戶得到的響應(yīng)是你的本地開發(fā)環(huán)境上的服務(wù)器提供的竟闪。