2012-10-11 72 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,你可以將所有的流量傳送到服務器。