在 Firefox 中,我可以连接到google.com:80
.但是之后
$ ssh -L 9000:google.com:80 testme@localhost
在 Firefox 中,我连接到http://localhost:9000/
,然后
- 这是一个错误。
在此服务器上找不到请求的 URL /。我们知道的就这些。
为什么有这样的差别呢?谢谢。
答案1
您的连接已正确建立,但您的浏览器正在请求 Google 服务器未配置为处理的主机和 URL(“localhost:9000”上的“/”)。
curl -v
您可以使用;查看请求它将至少包含
GET / HTTP/1.1
Host: localhost:9000
“Host”行用于确定正在请求哪个虚拟主机(这是 HTTP 1.1 相对于 1.0 的新增内容之一)。 Google 服务器没有配置“localhost:9000”的虚拟主机,因此它们无法找到请求的资源并回复 404 状态。
在大多数情况下,如果您想解决 Web 浏览问题并且正在考虑使用 SSH 隧道,则应该使用代理。在某些情况下,如有必要,您可能最终会使用 SSH 隧道来转发代理的侦听端口;但您通常不会使用 SSH 隧道转发 Web 服务器的侦听端口。
但是,如果您想了解这里发生的情况,并使隧道可在 Web 浏览器中使用(忽略上述内容),则需要确保本地主机将在目标期望的相同主机和端口上进行响应,或者指定应使用的“Host”标头curl
:
curl -H "Host: google.com" http://localhost:9000/
例如,使用 Web 浏览器,您可以在创建隧道时指定 IP 地址而不是主机名
ssh -L 9000:216.58.213.142:443 testme@localhost
然后加
127.0.0.1 google.com www.google.com
在浏览器中访问您的/etc/hosts
文件之前。https://google.com:9000