2011-11-24 104 views
2

我正在共享主機服務(hostmonster)上開發Django應用程序,當然,我無法通過Firefox訪問127.0.0.1:8000的默認本地主機ip上的runserver。 Django項目網站的文檔詳細介紹瞭如何設置遠程訪問運行服務器,但我沒有取得任何成功。將runserver設置爲0.0.0.0:8000使其無法訪問。雖然我認爲它不起作用,但我嘗試將runserver配置爲我的家庭IP地址。正如我所料,這給了我一個「該IP地址不能分配給」的錯誤。在共享主機上訪問Django Runserver

所以,我嘗試配置它到我的託管IP,通過我首先SSH的。設置正確,但仍無法通過Firefox訪問該地址。當我自己插入IP地址時,我只是得到一個hostmonster錯誤頁面。當我粘貼端口號時,連接超時。當我插入IP,端口號和/ admin來訪問我創建的Django管理頁面時,我也會超時。

+1

你應該確保你的主機甚至允許,也許他們阻止所有端口 – armonge

回答

2

運行:python manage.py runserver 0.0.0.0:8000

主機端口8000網站和可訪問超過http://site.com:8000/

運行:python manage.py runserver 0.0.0.0:80(你會需要root訪問權)

此託管網站上端口80和可以通過http://site.com/訪問(端口80隱含在這裏)。

但是,既然你說你在共享主機 - 所以你不會得到根訪問,所以你不能在這樣的端口80上主機。要在共享主機上移植端口80上的主機,您必須在運行在該共享服務器上的Web服務器上創建虛擬主機,並且只能在擁有域名時才能完成。

因此,出於測試目的 - 我建議您使用端口8000並通過http://site.com:8000/從您的家中使用它。

這裏,0.0.0.0表示它承載所有IP範圍。 (如果您沒有域名,請將您的ip地址更改爲site.com)

如果您仍然無法訪問 - 這可能意味着端口託管在該服務器上禁止用戶使用,因爲這是在擁有許多共享用戶的共享服務器上並不容易。

0

我打賭8000端口被封鎖了。這解釋了您在前幾句話中提到的超時:防火牆設置爲只丟棄數據包,不返回任何連接拒絕響應。

如果有辦法解決這個問題,你將不得不問問你的託管公司,但可能沒有。至少,他們將不得不打開一個非根端口(8000或其他超過1023的端口),但操作系統無法分辨何時打開端口或其他東西,所以它將成爲潛在的安全漏洞(例如,入侵者可以設置一些東西來偵聽該端口上的命令,就像你一樣)。

runserver並非真正設計在生產箱上運行。它被設計成可以在你的開發機器上運行,並且有一個小的測試數據庫或者其他東西。這可以讓你獲得大部分的錯誤。然後,將代碼推送到一個beta服務器,配置了真正的服務器應用程序(例如端口80上的apache)和數據庫等,以執行大量測試(確保至少有一個過濾器可以連接哪些IP)。然後你從那裏推動生產。或不;有很多方法可以做到這一點。

0

首先,網絡服務器通常具有至少兩個「接口」,每個接口具有一個或多個IP。 「回送」接口將具有IP 127.0.0.1,並且只能從運行服務器的機器訪問。

因此,在127.0.0.1:8000上運行意味着您要告訴runserver只能從該服務器本身在端口8000上訪問。這是安全的,但對於測試有點粗糙。爲了在Web瀏覽器中查看結果,您需要使用帶有端口轉發的SSH隧道。 (我會解釋怎麼做,但說實話,它不會解決你真正的問題,但我會回到那個。)

運行:8000意味着你告訴runserver可以從互聯網 - 這可能是你想要的。如果這不起作用,那麼它可能意味着他們正在對端口進行防火牆。你可以聯繫支持人員,讓他們打開一個洞,或者使用SSH隧道,但是現在我必須問:你想達到什麼目的?

您不應該使用runserver進行生產。在本地機器上使用runserver進行測試,然後部署到Hostmonster。 (顯然,根據他們的網站,他們通過FastCGI支持Django。)不要在Hostmonster上使用runserver,它不會做你想做的事。

6

有關(不)在生產環境中使用runserver的其他註釋適用。

如果你真的必須這樣運行,我會推薦使用SSH隧道,通過-L開關。

例如ssh -L 8888:127.0.0.1:8000 <user>@<remotehost>

那麼你應該能夠通過http://localhost:8888

這是假設你只是試圖讓該應用程序提供給自己的發展過程中查看該網站在本地機器上。

+0

當然,但如果你使用gunicorn,你也面臨類似的問題。如果網站在主機上運行,​​那麼應該可以採用某種形式的反向代理來將網站提供給全世界。仍然四處尋找一個好的圖書館。可以寫一個作爲反向代理的PHP腳本,但那會很愚蠢。 – danbgray