NGINX + SSH Tunnel 把本地開發環境公佈到網際網路上

Fjun發表於2017-04-24

在除錯一些介面的時候,你的網站應用要跟其它的一些外部服務進行交流,你發給它一點資料,它也會返回給你一點資料。但是如果是在本地開發環境上除錯,你只能傳送給外部服務資料,而外部服務返回來的資料你的本地環境是收不到的。因為你的本地環境並沒有一個固定的公網 IP 地址。


我不想直接在伺服器上去除錯,因為複雜而且不方便,忽然想到了之前用過的 BrowserSync 工具,有一個 Tunnel 選項,可以把在本地建立的伺服器公佈到網際網路上。我又想到了 SSH 有個 Tunnel 功能,原來用它作為本地電腦的代理用,我想大概可以用它,讓我的在公網上的一臺伺服器接待請求,再把請求轉到我的本地開發環境上,然後就去搜尋關鍵詞 NGINX,SSH,Tunnel ,找到了答案。


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


需求

一臺連線到公網的伺服器。

公網伺服器上安裝了 NGINX。

配置

先在公網伺服器上新增一個 NGINX 配置:

upstream tunnel {
  server 127.0.0.1:7689;
}

server {
  listen 80;
  server_name test.fjun.org;

  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.fjun.org,NGINX 會把請求轉給 tunnel,這個 tunnel 指的就是這臺公網伺服器,埠號是 7689,一會兒我們要用到這個埠跟本地電腦進行通訊。

通道


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

ssh -vnNT -R 伺服器埠:localhost:本地埠 伺服器使用者名稱@伺服器 IP 地址

示例

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

在上面這個例子裡,7689 指的是公網伺服器的埠,localhost 後面的 3000 是本地電腦用的埠。root 是登入到公網伺服器的使用者,42.120.40.68 是公網伺服器的 IP 地址。


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

本作品採用《CC 協議》,轉載必須註明作者和本文連結
每一天都要進步一點點!

相關文章