nginx 端口转发/ssh 隧道

nginx 端口转发/ssh 隧道
  • 我在本地网络上有一台计算机(我们称之为 A),没有可从外部访问的静态 IP 地址。(SSH 端口AAAAA
  • A 有一个网络服务器,我希望能够从外部访问
  • 我有一个可从互联网访问的服务器(B),它还运行一个网络服务器(ssh 端口BBBBB:)
  • 我希望能够从任何装有网络浏览器的计算机通过 B 访问 A 上的网络服务器。

我已经使用以下设置成功使用 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 浏览器中的设置,这非常麻烦......

所以我和某人讨论了这个问题,他告诉我,我可以通过直接在服务器 B 上完成机器 C 上的部分来简化设置,并在 B 的 Web 服务器上的 nginx 中进行一些 Web 配置。所以现在,我尝试了这个:

  • 在 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.

我用谷歌搜索了一下这个错误,发现了一些有相对类似问题的帖子,但老实说,由于我在这方面的技能(非常)有限,当我试图将他们的修复投射到我的用例中时,我迷失了方向...有人可以帮助我吗?

相关内容