讓我們詳細解釋一下整個過程,以便更好地理解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
。
整個請求流的詳細解釋
-
客戶端發起請求:
- 使用者在瀏覽器中訪問
http://ssh.englishspeaking.icu
。
- 使用者在瀏覽器中訪問
-
Nginx接收請求:
- 伺服器上的Nginx監聽80埠,接收到這個請求。
-
Nginx反向代理到本地8080埠:
- Nginx將請求轉發到
localhost:8080
。在這個上下文中,localhost
指的是遠端伺服器ssh.englishspeaking.icu
。
- Nginx將請求轉發到
-
SSH反向隧道接收請求:
- 由於我們之前配置了SSH反向隧道,遠端伺服器的8080埠實際上被對映到本地機器的3000埠。
- 所以,當Nginx將請求轉發到
localhost:8080
時,SSH會將這個請求轉發到本地機器的3000埠。
-
本地服務處理請求:
- 本地機器上的服務(監聽3000埠的服務)接收到請求並處理它,然後將響應傳送回SSH隧道。
-
響應返回客戶端:
- 響應透過SSH隧道返回到遠端伺服器的8080埠。
- Nginx接收到從8080埠返回的響應,並將其傳送回客戶端的瀏覽器。
總結
- SSH反向隧道:將遠端伺服器的埠(8080)對映到本地機器的埠(3000)。
- Nginx反向代理:將來自80埠的請求轉發到遠端伺服器的8080埠。
透過這種方式,使用者可以透過訪問http://ssh.englishspeaking.icu
來間接訪問本地機器上的服務(監聽3000埠的服務),而不需要直接暴露本地網路。