2008-12-08 39 views
1

我使用Django作爲Web框架,然後分別使用Apache和Lighttpd作爲Web服務器和靜態媒體服務器。 Lighty爲我提供的所有靜態內容都很好,但我需要將其配置爲提供用戶上傳的新文件。 Lighttpd運行在與Apache(Django)不同的機器上。我創建一個目錄然後創建一個映像文件的django代碼在我的Apache機器上執行,使它當前被保存在同一臺機器中。我希望這個目錄和文件的創建發生在我的靜態媒體服務器上,然後由媒體服務器自己來完成。 我使用os.mkdir和urllib.urlretrieve函數分別在Django(Apache)機器上創建目錄和保存文件。無論如何,我可以做一些配置調整,以獲得這些東西的工作,或者我需要在媒體服務器上編寫腳本並從Django機器調用em?Lighttpd和Apache Django配置需要的幫助

回答

1

最簡單的答案是用戶上傳到兩個Web服務器均可訪問的共享目錄。然後立即可用。如果你使用unix(聽起來像是這樣),那麼NFS是一個可能的解決方案。如果您認爲您的網站將擴展到多臺服務器,那麼使用rsync推送到多個邊緣服務器,甚至可能實施分片方案是另一種解決方案。

只要小心。根據您的應用程序,您需要考慮很多安全問題。

如果所有文件都轉到可公開訪問的目錄,用戶可能會猜測其他人文件的名稱並下載它們。在這種情況下,您需要在Django中爲他們提供頂層的安全機制。

永遠不要相信你的用戶!驗證他們上傳的內容是否在某個允許的集合中。在任何情況下,您都不應允許他們上傳任何他們想要的內容。除非你的用戶是一個值得信賴的人。即使這樣你應該做一些檢查。他們可能不應該爲其中一個上傳.php文件。你想給他們的最後一件事是能夠在你的服務器上運行任意腳本。至少將目錄配置爲只提供文件而不執行任何操作。

好運

+0

非常感謝。 NFS像一個魅力工作,我正在盡我所能,使其安全。我想我正在處理你提到的幾乎所有的安全問題。再次感謝。 – Bharath 2008-12-12 07:18:35

0

這是我使用rsync的東西。在主服務器上執行任何您喜歡的操作,然後定期(或按需)將rsync推送到靜態服務器。 Rsync比通過快速入侵可以產生的任何東西都要快(並且更有特色)。

僅僅因爲我是偏執狂,我把我的所有客戶網站的每小時rsync做到2個備份服務器,其中一個在我的車庫。我對一個1.7GB的客戶站點(它沒有任何改變)計時了一個「rsync -a」,並且花費了9.92秒的掛鐘時間,其中包括用於rsyncing 3個不同目錄的3次網絡握手。如果有任何改變,presto-bango,它完成了,包含時間戳,所有者/組等。

當你得到真實的,多機器,無人蔘與的備份時,加工。我睡得很好。

+0

感謝您的評論,但使用rsync可能需要我們先暫時從Web服務器本身提供文件服務,然後執行從靜態文件服務器提供的rsync推後它的機制。 NFS現在運行良好,我們將看看rsync是否會在未來以任何方式幫助我們。 – Bharath 2008-12-12 07:22:40