【问题标题】:Howto configure Apache WSGI for multiple separate Django instances?如何为多个单独的 Django 实例配置 Apache WSGI?
【发布时间】:2013-07-26 13:39:20
【问题描述】:

我有一个 apache 实例,其中有以下内容

WSGIPythonPath /production/somelocation/django12/lib/python2.4/site-packages/
<VirtualHost 192.168.1.1:443>
        WSGIScriptAlias / /opt/project.wsgi
        .....

我的 Django 1.5 应用程序 apache 配置看起来像,

WSGIPythonPath /production/somelocation/django15/lib/python2.7/site-packages/
<VirtualHost 192.168.1.2:443>
        ....
        WSGIScriptAlias / /opt/project2.wsgi

我的 /opt/project.wsgi 看起来像

import os
import sys

# django1.2 virtualenv
import site
site.addsitedir("/production/somelocation/django12/lib/python2.4/site-packages")
.....

但是,当我访问该站点时,我仍然会得到我的默认 django (1.5) 实例。我错过了什么?

【问题讨论】:

    标签: python django apache2 mod-wsgi


    【解决方案1】:

    其他答案提到设置 python 路径,但是使用 WSGIPythonPath 或 WSGIPythonHome 是不正确的。 WSGIPythonPath / WSGIPythonHome 只能设置服务器范围,因此每个虚拟主机没有不同的路径。

    您可能希望使用WSGIDaemonProcess python-pathhome 参数来设置每个虚拟主机的 python 路径和您的应用主目录。

    此外,在您的代码中,无需调整 python 路径;只需确保您的虚拟主机配置正确即可。

    【讨论】:

    • 我说的是python-path,就像你刚才说的那样。请参阅我的第二个答案,因为直到现在我都无法访问我的 httpd-vhost 文件。
    • 谢谢,我已经使用了 WSGIDaemonProcess,但是这可以工作,我没有设置用户或组,然后使用“WSGIApplicationGroup %{GLOBAL}”。所以我不确定这是否是一个安全问题?跨度>
    • 在同一台机器上托管多个站点时不应该这样做。您可以使用 usergroup 参数来设置应该执行 WSGI 的用户/组。
    • 你能确定谁给了你正确的答案吗?谢谢。
    • 好的,谢谢,那么您将 user1/group1 用于站点 A,将 user2/group2 用于站点 B 吗?感谢您的所有帮助....
    【解决方案2】:

    您可能需要设置WSGIPythonHome,因为您有不同的 Django 安装。

    WSGIPythonPath 用于定义附加目录,但此选项不设置默认 python 安装。因此,您的默认 python 目录可能还包含 django (1.5) 并将此版本识别为默认 django 版本。我不知道你的 python 和 django 安装和配置,但这可能是原因。

    WSGIPythonHome 的其他信息

    【讨论】:

      【解决方案3】:

      这就是我对 Pyramid 的处理方式:

      <VirtualHost *:80>
          Servername hackintosh
          DocumentRoot "/Library/WebServer/Documents"
      </VirtualHost>
      
      
      <VirtualHost *:80>
          ServerName modwebsocket.local
          ErrorLog "/PythonProjects/MOD_WEBSOCKET/logs/error_log"
          CustomLog "/PythonProjects/MOD_WEBSOCKET/logs/access_log" common
      
          WSGIDaemonProcess pyramid-modwebsocket user=apero group=staff threads=4 python-path=/PythonProjects/MOD_WEBSOCKET/lib/python2.7/site-packages
          WSGIProcessGroup pyramid-modwebsocket
      
          WSGIScriptAlias /  /PythonProjects/MOD_WEBSOCKET/wsgi/pyramid.wsgi
      
          <Directory "/PythonProjects/MOD_WEBSOCKET/wsgi">
              WSGIProcessGroup pyramid-modwebsocket
              Order allow,deny
              Allow from all
          </Directory>
      
      </VirtualHost>
      
      <VirtualHost *:80>
          ServerName ai.local
          ErrorLog "/PythonProjects/AI/logs/error_log"
          CustomLog "/PythonProjects/AI/logs/access_log" common
      
          WSGIApplicationGroup %{GLOBAL}
          WSGIPassAuthorization On
          WSGIDaemonProcess pyramid-ai user=apero group=staff threads=4 python-path=/PythonProjects/AI/lib/python2.7/site-packages
          WSGIProcessGroup pyramid-wizard
      
          WSGIScriptAlias /  /PythonProjects/AI/wsgi/pyramid.wsgi
      
          <Directory "/PythonProjects/AI/wsgi">
              WSGIProcessGroup pyramid-ai
              Order allow,deny
              Allow from all
          </Directory>
      
      </VirtualHost>
      

      【讨论】:

      • 那么,这和我最初的回答是否解决了您的问题?如果是,谢谢你给分。
      【解决方案4】:

      这个话题和典型的成因详述于:

      您的问题中没有足够的信息来正确评估您遇到的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-12
        • 2011-01-31
        相关资源
        最近更新 更多