https://ninghao.net/blog/4452
gongjimin 在論壇上介紹了另一個(gè)方法:http://talk.ninghao.net/t/nginx-ssh/4716
在調(diào)試一些接口的時(shí)候,你的網(wǎng)站應(yīng)用要跟其它的一些外部服務(wù)進(jìn)行交流,你發(fā)給它一點(diǎn)數(shù)據(jù),它也會返回給你一點(diǎn)數(shù)據(jù)。但是如果是在本地開發(fā)環(huán)境上調(diào)試,你只能發(fā)送給外部服務(wù)數(shù)據(jù),而外部服務(wù)返回來的數(shù)據(jù)你的本地環(huán)境是收不到的。因?yàn)槟愕谋镜丨h(huán)境并沒有一個(gè)固定的公網(wǎng) IP 地址。
我不想直接在服務(wù)器上去調(diào)試,因?yàn)閺?fù)雜而且不方便,忽然想到了之前用過的 BrowserSync 工具,有一個(gè) Tunnel 選項(xiàng),可以把在本地創(chuàng)建的服務(wù)器公布到互聯(lián)網(wǎng)上。我又想到了 SSH 有個(gè) Tunnel 功能,原來用它作為本地電腦的代理用,我想大概可以用它,讓我的在公網(wǎng)上的一臺服務(wù)器接待請求,再把請求轉(zhuǎn)到我的本地開發(fā)環(huán)境上,然后就去搜索關(guān)鍵詞 NGINX,SSH,Tunnel ,找到了答案。
用 SSH 在本地電腦與公網(wǎng)服務(wù)器之間打開一個(gè)通道,配置公網(wǎng)服務(wù)器的 NGINX,把收到的請求轉(zhuǎn)到本地電腦與公網(wǎng)服務(wù)器的這個(gè)通道上。
先在公網(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 會把請求轉(zhuǎn)給 tunnel,這個(gè) tunnel 指的就是這臺公網(wǎng)服務(wù)器,端口號是 7689,一會兒我們要用到這個(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 ,把請求轉(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ù)器提供的。