本地開發環境公布到互聯網上(nginx + SSH Tunnel)

調試一些接口的時候,網站應用要跟一些外部服務進行交流,你發給它一點數據,它也會返回給你一點數據。但是如果是在本地開發環境上調試,你只能發送給外部服務數據,而外部服務返回來的數據你的本地環境是收不到的,如何做外網服務器訪問的請求轉發到本地呢?

基本思路是使用SSH反向隧道,把運行在本地的一個服務發布到互聯網上Linux服務器的一個本地端口,然后再用nginx反向代理來把這個本地端口發布到互聯網。

我不想直接在服務器上去調試,因為復雜而且不方便,忽然想到了之前用過的BrowserSync工具,有一個 Tunnel 選項,可以把在本地創建的服務器公布到互聯網上。我又想到了 SSH 有個 Tunnel 功能,原來用它作為本地電腦的代理用,我想大概可以用它,讓我的在公網上的一臺服務器接待請求,再把請求轉到我的本地開發環境上,然后就去搜索關鍵詞 NGINX,SSH,Tunnel ,找到了答案。

用 SSH 在本地電腦與公網服務器之間打開一個通道,配置公網服務器的NGINX,把收到的請求轉到本地電腦與公網服務器的這個通道上。

需求

  • 一臺連接到公網的服務器。
  • 公網服務器上安裝了 NGINX。

配置

  • 先在公網服務器上添加一個 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 創建了一個代理,如果有人訪問 dev.ninghao.net,NGINX 會把請求轉給 tunnel,這個 tunnel 指的就是這臺公網服務器,端口號是 7689,一會兒我們要用到這個端口跟本地電腦進行通信。

通道

我們要在本地電腦與公網服務器之間,使用 SSH 打開一個通道。要執行的命令像這樣:

ssh -vnNT -R 服務器端口:localhost:本地端口 服務器用戶名@服務器 IP 地址

示例:

ssh -vnNT -R 7689:localhost:3000 root@42.120.40.68

在上面這個例子里,7689 指的是公網服務器的端口,localhost 后面的 3000 是本地電腦用的端口。root 是登錄到公網服務器的用戶,42.120.40.68 是公網服務器的 IP 地址。

因為我們配置了公網服務器的 NGINX,訪問 dev.ninghao.net ,把請求轉到服務器上的 7689 端口,這個端口跟我們的本地電腦上的 3000 端口是連接到一塊兒的。所以,你在本地開發環境上搭建的服務器,應該使用 3000 這個端口提供服務。也就是,當有人訪問 dev.ninghao.net 這個地址的時候,用戶得到的響應是你的本地開發環境上的服務器提供的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,993評論 19 139
  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx?那么一定聽過它的“同行”Apache吧!Ngi...
    JokerW閱讀 32,803評論 24 1,002
  • 國家電網公司企業標準(Q/GDW)- 面向對象的用電信息數據交換協議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,186評論 6 13
  • 你面對著山河一步步離開我 我無法轉身離去 亦無法出口挽留 我感受著風起和云涌 我眼看著你的背影逐漸模糊 天氣不好風...
    穩兒閱讀 616評論 5 11
  • 美國大學的教學質量與設施是其他國家無法比擬的,但美國學校向來以較高的門檻讓很多想留學的家長和孩子們望而卻步。美國本...
    echo梁小厚閱讀 361評論 0 0