2012-10-11 69 views
2

我想从我的本地计算机到远程供应商的网站被IP锁定(我们的企业服务器被允许访问)。我通过从可以访问API的服务器进行隧道传输来完成此任务,但是,当我设置SSH隧道并转到供应商网站上的URL时,出现404 Not Found错误。下面是我使用的是什么:问题SSH隧道到远程服务器

ssh -f -N [email protected] -L 7777:vendorhostexample.com:80 

一切都表明,在隧道是否设置正确,但如果我尝试这样的URL的“http://本地主机:7777/foobar的”,我得到的404错误。有任何想法吗?

回答

3

您的问题是您要发送的HTTP报头“的位置:本地主机”,这意味着如果目标Web服务器使用virtualhosts,它会尝试查找对网站的“本地主机”,而不是对网站的“vendorhostexample.com”

Ryan指出要修改你的主机文件并告诉你的机器vendorhostexample.com它在127.0.0.1上,这样当你在浏览器中输入它时,你将通过正确的“Host:”http标题集。

另一种方式是为您的浏览器安装一个扩展程序,以便为Firefox更改主机标头,如this one

+0

终于到处看着这个......它工作,如果我更改主机头,但我不能得到它的工作,只需将供应商的URL指向我的本地主机 - 任何想法,为什么这是行不通的?我并不总是浏览器,如果不需要,我不想在代码中更改主机。 – acvcu

+0

如果您在主机文件(Linux上的/ etc/hosts)上添加一行,告诉您的机器vendorhostexample位于127.0.0.1,则不需要设置主机头。该行看起来像这样:'127.0.0.1 vendorhostexample.com www.vendorhostexample.com' – Valor

-1

你用这个破坏HTTP。您的浏览器正在发送HTTP头中的主机名localhost,这意味着您要求供应商网站的localhost网站。他们几乎可以肯定不会在他们的服务器上安装一个localhost站点,因此您可以获得404。

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

+0

设置Http代理的最佳方式是什么? – acvcu

+0

没有最好的办法。选择一个并去,例如http://www.squid-cache.org/ –

+0

你不需要为此设置一个http代理,有许多方法可以在没有代理的情况下实现。从@raynix更改localhost指出添加浏览器扩展来替换请求的“Host:”标题。 – Valor

1

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

127.0.0.1 vendorhostexample.com 

,然后再试一次。

+0

尝试此操作后,我仍然收到404 - 隧道两侧的端口是否必须是80才能使用此方法? – acvcu

2

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

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