SSH反向隧道的工作原理

让速不让路發表於2024-06-14

讓我們詳細解釋一下整個過程,以便更好地理解SSH反向隧道和Nginx反向代理的工作原理。

1. SSH反向隧道的工作原理

當你執行以下命令時:

ssh -N -R 8080:localhost:3000 root@ssh.englishspeaking.icu

你正在告訴SSH客戶端在遠端伺服器(ssh.englishspeaking.icu)上監聽8080埠,並將所有到達這個埠的流量轉發到本地機器的3000埠。

2. Nginx反向代理的工作原理

Nginx反向代理配置如下:

server {
    listen 80;
    server_name ssh.englishspeaking.icu;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

這個配置告訴Nginx在ssh.englishspeaking.icu的80埠監聽所有HTTP請求,並將這些請求轉發到localhost:8080

整個請求流的詳細解釋

  1. 客戶端發起請求

    • 使用者在瀏覽器中訪問http://ssh.englishspeaking.icu
  2. Nginx接收請求

    • 伺服器上的Nginx監聽80埠,接收到這個請求。
  3. Nginx反向代理到本地8080埠

    • Nginx將請求轉發到localhost:8080。在這個上下文中,localhost指的是遠端伺服器ssh.englishspeaking.icu
  4. SSH反向隧道接收請求

    • 由於我們之前配置了SSH反向隧道,遠端伺服器的8080埠實際上被對映到本地機器的3000埠。
    • 所以,當Nginx將請求轉發到localhost:8080時,SSH會將這個請求轉發到本地機器的3000埠。
  5. 本地服務處理請求

    • 本地機器上的服務(監聽3000埠的服務)接收到請求並處理它,然後將響應傳送回SSH隧道。
  6. 響應返回客戶端

    • 響應透過SSH隧道返回到遠端伺服器的8080埠。
    • Nginx接收到從8080埠返回的響應,並將其傳送回客戶端的瀏覽器。

總結

  • SSH反向隧道:將遠端伺服器的埠(8080)對映到本地機器的埠(3000)。
  • Nginx反向代理:將來自80埠的請求轉發到遠端伺服器的8080埠。

透過這種方式,使用者可以透過訪問http://ssh.englishspeaking.icu來間接訪問本地機器上的服務(監聽3000埠的服務),而不需要直接暴露本地網路。

相關文章