nginx 連接埠轉送/ssh 隧道

nginx 連接埠轉送/ssh 隧道
  • 我在本機網路上有一台電腦(我們稱之為 A),沒有可從外部存取的靜態 IP 位址。 (SSH 連接埠AAAAA
  • A 有一個網頁伺服器,我希望能夠從外部存取它
  • 我有一個可透過網路存取的伺服器 (B),它還運行一個網路伺服器(ssh 連接埠BBBBB:)
  • 我希望能夠從任何具有 Web 瀏覽器的電腦存取 A 到 B 上的 Web 伺服器。

我已透過以下設定成功使用 SSH 遠端隧道:

  • 在機器A上:

    $> ssh -f -N -p BBBBB -R 0.0.0.0:9000:localhost:AAAAA [email protected]

  • 在機器C上:

    $> ssh -f -p 9000 -D 9001 -N [email protected]

  • 在機器 C 的 Web 瀏覽器上,manual proxy configuration SOCKS host: localhost, port 9001, SOCKS v5

這確實很好用,但是每次都必須在 C 上啟動 SSH 命令並更改 Web 瀏覽器中的設置,這非常繁瑣...

所以我和某人討論了這個問題,他告訴我,我可以透過在機器 C 上完成的部分直接在伺服器 B 上完成,並在 B 的網路伺服器上的 nginx 中進行一些網路設定來簡化設定。所以現在,我嘗試了這個:

  • 在A上,和以前一樣
  • 在 B 上:

    $> ssh -f -p 9000 -D 9001 -N [email protected]

  • B 的 nginx 設定:

    $> cat /etc/nginx/sites-available/default:

upstream tunnel {
    server 127.0.0.1:9000;
}

server {
        listen 80;
        [...]
      location /A {
        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;
  }
    [...]
}
server {
        listen 443 ssl;
        [...]
      location /A {
        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;
  }
    [...]    
}

據我了解,從連接到互聯網的計算機上的網絡瀏覽器,請求http://B.B.B.B/A應該隧道到127.0.0.1:9000我的計算機 A 的轉發端口,從而使我可以訪問 A 上的網絡伺服器。

不過,此設定有問題,因為當我嘗試連線時,http://B.B.B.B/A載入時間很長(大約一分鐘),然後是一個空白頁面,上面寫有以下錯誤訊息:

SSH-2.0-OpenSSH_6.7p1 Raspbian-5+deb8u3
Protocol mismatch.

我用谷歌搜尋了一下這個錯誤,發現了一些具有相對相似問題的帖子,但老實說,由於我在這類事情上的(非常)有限的技能,當我試圖將他們的修復項目投射到我的用例時,我迷失了方向...有人可以幫我嗎?

相關內容