2008-09-17 63 views
3

多個站點有哪些來自於一個單一的,共同的Python Web框架運行多個站點的好(或至少是聰明)的方式(即:主塔,TurboGears中,等)?我知道你可以根據域名或重定向路徑來重定向URI以指向特定站點的位置,我也看到了一些我想避免的粗暴的「if site == 'site1'/elseif/elseif/etc」。運行從一個Python Web框架

回答

8

的Django有這種內置的。見the sites framework

作爲一種常規技術,在數據庫架構中包含一個「主機」列,並將其附加到要作爲主機特定的數據上,然後在檢索數據時在查詢中包含Host HTTP標頭。

2

我用的CherryPy作爲我的Web服務器(隨TurboGears的捆綁),我僅僅需要在綁定到本地主機不同端口的CherryPy Web服務器的多個實例。然後,我使用mod_proxy和mod_rewrite配置Apache,以基於HTTP請求將請求透明地轉發到適當的端口。

1

在本地端口上使用多個服務器實例是一個好主意,但您不需要全功能的Web服務器來重定向HTTP請求。

我會用pound作爲反向代理來完成這項工作。它體積小巧,快速,簡單,正是我們這裏所需要的。

WHAT磅是:

  1. 反向代理:它通過從客戶端瀏覽器的請求的一個或多個後端服務器。
  2. 負載平衡器:它將在幾個後端服務器之間分配來自客戶端瀏覽器的請求,同時保留會話信息。
  3. SSL封裝:Pound將解密來自客戶端瀏覽器的HTTPS請求,並將它們作爲純HTTP傳遞給後端服務器。
  4. 一個HTTP/HTTPS殺毒軟件:Pound會驗證請求的正確性並且只接受格式正確的請求。
  5. 故障轉移服務器:如果後端服務器發生故障,Pound會注意到這一事實,並在故障恢復之前停止向它傳遞請求。
  6. 請求重定向器:請求可能根據請求的URL在服務器之間分配。
6

與mod_python的Apache的使用Django,我承載多個(無關)Django的網站只是用下面的Apache的配置:

<VirtualHost 1.2.3.4> 
     DocumentRoot /www/site1 
     ServerName site1.com 
     <Location /> 
       SetHandler python-program 
       SetEnv DJANGO_SETTINGS_MODULE site1.settings 
       PythonPath "['/www'] + sys.path" 
       PythonDebug On 
       PythonInterpreter site1 
     </Location> 
</VirtualHost> 

<VirtualHost 1.2.3.4> 
     DocumentRoot /www/site2 
     ServerName site2.com 
     <Location /> 
       SetHandler python-program 
       SetEnv DJANGO_SETTINGS_MODULE site2.settings 
       PythonPath "['/www'] + sys.path" 
       PythonDebug On 
       PythonInterpreter site2 
     </Location> 
</VirtualHost> 

無需多次阿帕奇實例或代理服務器。對每個站點使用不同的PythonInterpreter指令(您輸入的名稱是任意的)可以保持名稱空間分離。