2012-10-18 63 views
2

使Django/admin/urls只能訪問本地主機的最簡單方法是什麼?如何讓Django管理員URL只能訪問本地主機?

選項我已經想到了:

  • 單獨的管理界面了項目(在某種程度上),並運行爲不同的虛擬主機(在Apache2的)
  • 使用在主機的前代理( Apache2)web服務器
  • 以某種方式限制WSGI中Apache內的URL。

是否有標準方法?

謝謝!

回答

10

標識去Apache配置:

<Location /admin> 
    Order Deny, Allow 
    Deny from all 
    Allow from 127.0.0.1 
</Location> 

HTH。

+0

簡單和第一次工作。 – wodow

2

我會去的Apache配置+在前面跑的代理+在WSGI限制:

  1. 我不喜歡的Apache時生成動態內容的介入與Web客戶端通信。由於它的執行模式,一個緩慢或斷開連接的客戶端可以捆綁Apache進程。如果你在前面有一個代理(我更喜歡nginx,但即使是apache也可以),代理會擔心客戶端,Apache可以專注於新的動態內容請求。

  2. 取決於你的Apache配置,一個進程還可以汲取大量內存並保持它,直到它遇到MaxRequests。如果你在/ admin中有很多內存密集的代碼(很多人都這樣做),那麼你最終可能會獲得比他們需要的更多內存的Apache進程。如果你將你的Apache配置分爲/ admin和/!admin,你可以調整你的apache設置,讓更多的/!管理服務器需要更小的佔用空間。

  3. 我是偏執的服務器設置。

    • 我想確保代理只發送/管理到某個Apache端口。
    • 我想確保Apache只接收/管理某些apache端口,並且它來自代理(帶有祕密標頭)或來自本地主機。
    • 我想確保WSGI僅基於特定的服務器/客戶端條件運行/管理員的東西。
+0

一個很好的答案 - 謝謝!我明白,這是全面覆蓋的方式。 – wodow

+0

是的,這沒什麼更多的工作,並且你可以安心和服務器性能得到改善。您還可以通過環境變量和部署腳本在「開發vs登臺和生產」上以不同的方式工作。 –

+0

您不需要單獨的Apache來分割URL部分。您可以通過將不同部分的URL名稱空間委託給不同的守護進程進程組來處理它,並使用mod_wsgi守護進程模式。然後,您可以分別控制進程/線程數量和自動重新啓動進程,通過爲特定的守護進程組設置它來爲一組子URL分別進行控制。另外,在前面使用香草Apache作爲代理仍然有許多與Apache直接面對相同的問題。使用nginx作爲代理仍然好得多。 –

相關問題