让我们详细解释一下整个过程,以便更好地理解SSH反向隧道和Nginx反向代理的工作原理。
1. SSH反向隧道的工作原理
当你运行以下命令时:
ssh -N -R 8080:localhost:3000 [email protected]
你正在告诉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端口的服务),而不需要直接暴露本地网络。