从单个Python Web框架运行多个站点

时间:2008-09-17 16:37:24

标签: python frameworks

从单个常见的Python Web框架(即:Pylons,TurboGears等)运行多个站点的好方法(或至少是聪明的)是什么?我知道您可以根据域或路径进行重定向,以重写URI以指向特定于站点的位置,并且我还看到了一些我希望避免的野蛮“if site == 'site1' / elseif / elseif / etc”。

4 个答案:

答案 0 :(得分:8)

Django内置了这个内容。请参阅the sites framework

作为一种通用技术,在数据库模式中包含一个“主机”列,该数据库模式附加到您希望特定于主机的数据,然后在检索数据时在查询中包含Host HTTP标头。 / p>

答案 1 :(得分:6)

使用带有mod_python的apache上的Django,我只需使用以下apache配置来托管多个(不相关的)django站点:

<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>

不需要多个apache实例或代理服务器。为每个站点使用不同的PythonInterpreter指令(您输入的名称是任意的)使名称空间保持独立。

答案 2 :(得分:2)

我使用CherryPy作为我的Web服务器(与Turbogears捆绑在一起),我只是在绑定到localhost的不同端口上运行CherryPy Web服务器的多个实例。然后我使用mod_proxy和mod_rewrite配置Apache,根据HTTP请求透明地将请求转发到正确的端口。

答案 3 :(得分:1)

在本地端口上使用多个服务器实例是个好主意,但您不需要功能齐全的Web服务器来重定向HTTP请求。

我会使用pound作为反向代理来完成这项工作。它小巧,快速,简单,完全符合我们的需求。

  

是什么:

     
      
  1. 反向代理:它将客户端浏览器的请求传递给一个或多个后端服务器。
  2.   
  3. 负载均衡器:它将在多个后端服务器之间分配来自客户端浏览器的请求,同时保留会话信息。
  4.   
  5. SSL包装器:Pound将解密来自客户端浏览器的HTTPS请求,并将它们作为普通HTTP传递给后端服务器。
  6.   
  7. HTTP / HTTPS清理程序:Pound将验证请求是否正确,并且只接受格式正确的请求。
  8.   
  9. 故障转移服务器:如果后端服务器发生故障,Pound会注意到这一事实并停止向其发送请求,直到它恢复。
  10.   
  11. 请求重定向器:请求可以根据请求的URL在服务器之间分发。
  12.