3

我正在尝试从我的本地计算机访问被 IP 锁定的远程供应商网站(我们的公司服务器被允许访问)。我通过从可以毫无问题地访问 API 的服务器建立隧道来做到这一点,但是,当我设置 SSH 隧道并转到供应商网站上的 URL 时,我收到 404 Not Found 错误。这是我正在使用的:

ssh -f -N user@example.com -L 7777:vendorhostexample.com:80

一切都表明隧道设置正确,但是如果我尝试使用诸如“http://localhost:7777/foobar”之类的 URL,则会收到 404 错误。有任何想法吗?

4

4 回答 4

3

您的问题是您正在发送 http 标头“位置:localhost”,这意味着如果目标网络服务器使用虚拟主机,它将尝试查找网站“localhost”而不是网站“vendorhostexample.com”

一种方法是 Ryan 指出修改您的主机文件并告诉您的机器 vendorhostexample.com 它位于 127.0.0.1 上,这样当您在浏览器中键入它时,您将通过带有正确“主机:”http 标头的隧道放。

另一种方法是为您的浏览器安装扩展程序以更改 Host 标头,例如用于 Firefox的此标头。

于 2012-10-12T16:34:11.553 回答
2

其他人都已经提到了域名匹配错误虚拟主机的问题。另一种解决方案是使用动态隧道。

如果您使用该-D 8080标志打开连接,SSH 将打开一个动态隧道,并在端口 8080 上公开一个 SOCKS 代理。如果您随后将浏览器(或您选择的应用程序)设置为在 localhost:8080 上使用 SOCKS 代理,您可以将所有流量通过隧道传输到服务器。

于 2012-10-14T12:06:06.080 回答
1

您可以编辑本地主机(Linux 的 /etc/hosts)文件,并添加如下行:

127.0.0.1 vendorhostexample.com

然后再试一次。

于 2012-10-12T08:57:27.667 回答
-1

你用这个打破了HTTP。您的浏览器在 HTTP 标头中发送主机名localhost,这意味着您正在请求localhost供应商网站的网站。他们几乎可以肯定不会localhost在他们的服务器上托管网站,所以你得到了 404。

你不能以你现在的方式隧道 HTTP。您需要在公司服务器上设置适当的 HTTP 代理。

于 2012-10-11T17:54:47.603 回答