2008-09-17 62 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指令(您输入的名称是任意的)可以保持名称空间分离。