如何使用mod_wsgi在单个域下托管多个Django项目?

时间:2019-06-14 07:45:02

标签: python django apache mod-wsgi

我有多个django项目,我想将它们托管在同一个域下 例如:example.com/one<br> example.com/two

我搜索了各种解决方案,并找到了下面的链接,这些链接对我有很大帮助。 Is it possible to host multiple django projects under the same domain?

从上面的阅读中,我知道我需要为此mod_wsgi,但是我很困惑mod_wsgi的安装位置-我是否需要在每个项目文件夹下安装(每个文件夹都分开myenv),或者只能安装一次。 请帮助我了解如何安装此mod_wsgi的方式和位置,以及最后如何在同一域名下托管多个项目。

2 个答案:

答案 0 :(得分:0)

我会告诉您我们在项目中的工作方式。我们有一个带有不同路由的Django项目。例如/players/tablet。我们将项目托管在两个Docker容器中。我们将NGINX作为我们的反向代理。 NGINX根据路由将请求重定向到适当的容器。 NGINX暴露于世界。但是,我不确定它是否对您有用。

答案 1 :(得分:0)

安装mod_wsgi取决于您的主机操作系统。检查说明。如果您使用的是CentOS或RedHat,建议您查看IUS社区。它们为存储库提供了适用于Python 3.6和mod_wsgi的yum可安装软件包。您安装的mod_wsgi版本必须与您在虚拟环境中运行的Python版本进行编译。

然后,您需要正确配置VirtualHost。如果您的主机是根主机,则它必须位于定义的最后。这是一个示例:

<VirtualHost *:443>
  TimeOut 300
  SSLEngine On

  ServerName mysite.example.com

  # Set to the lobal Application Group
  WSGIApplicationGroup %{GLOBAL}
  # Pass Authorizations through to the WSGI app for Django REST Framework Token Auth
  WSGIPassAuthorization On

  WSGIDaemonProcess subsite-develop-https python-home=/web/subsite-develop/venv request-timeout=300 user=apache group=apache
  WSGIProcessGroup subsite-develop-https
  WSGIScriptAlias /subsite /web/subsite-develop/config/wsgi.py process-group=subsite-develop-https
  <Directory /web/subsite-develop/config>
    Require all granted
  </Directory>
  Alias /subsite/static/ /web/subsite-develop/static/
  <Directory /web/subsite-develop/static>
    Header always set Access-Control-Allow-Origin "*"
    Require all granted
  </Directory>

  WSGIDaemonProcess django-mysite-develop-https python-home=/web/django-mysite-develop/venv request-timeout=300 user=apache group=apache
  WSGIProcessGroup django-mysite-develop-https
  WSGIScriptAlias / /web/django-mysite-develop/config/wsgi.py process-group=django-mysite-develop-https
  <Directory /web/django-mysite-develop/config>
    Require all granted
  </Directory>
  Alias /static/ /web/django-mysite-develop/static/
  <Directory /web/django-mysite-develop/static>
    Header always set Access-Control-Allow-Origin "*"
    Require all granted
  </Directory>
  Alias /media/ /var/media/mysite-www/
  <Directory /var/media/mysite-www>
    Require all granted
  </Directory>
</VirtualHost>

此示例将在/subsite/托管一个站点,在根/托管另一个站点。请注意,根站点排在最后。这也意味着您将无法在根项目中使用路由/subsite/,因为Apache将通过WSGIScriptAlias定义将其转移到。

这也适用于具有TLS的网站;您可能必须将443切换为80,如果您不使用TLS,请删除SSLEngine OnWSGIPassAuthorization用于Django REST Framework令牌,您也可以将其删除,但我将其作为一个更完整的示例。当他们切换到Require all granted语法时,这适用于Apache 2.4 +。

IUS社区,如果在RedHat / CentOS上:https://ius.io/