SSH反向隧道的工作原理

让我们详细解释一下整个过程,以便更好地理解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端口的服务),而不需要直接暴露本地网络。

posted @ 2024-06-14 23:52  让速不让路  阅读(67)  评论(0编辑  收藏  举报