【问题标题】:How do I run two separate Django sites based on a subdomain?如何基于子域运行两个单独的 Django 站点?
【发布时间】:2016-03-31 22:55:16
【问题描述】:

我有两个 Django 站点。一个是临时站点,另一个是生产站点。我希望在beta.ialexander.io 和生产站点在ialexander.io 上可见。我在 Apache 中使用 mod_wsgi。这是两个.conf 文件:

ialexander.conf:

# WSGI Stuff
WSGIPythonPath /var/www/Ullmannite

<VirtualHost *:80>
  # WSGI Stuff
  WSGIScriptAlias / /var/www/Ullmannite/Ullmannite/wsgi.py

  # Identification
  ServerName ialexander.io 
  ServerAdmin Alexander2475914@gmail.com

  # Public files
  Alias /assets /var/www/Ullmannite/public

  # Logs
  ErrorLog ${APACHE_LOG_DIR}/iAlexander-Error.log
  CustomLog ${APACHE_LOG_DIR}/iAlexander-Access.log combined

  # Access
  DocumentRoot "/var/www/Ullmannite/public"

  <Directory "/var/www/Ullmannite/Ullmannite">
    <Files "wsgi.py">
      Require all granted
    </Files>
  </Directory>

  <Directory "/var/www/Ullmannite/public">
    Require all granted
  </Directory>
</VirtualHost>

000-ialexander-staging.conf:

# WSGI Stuff
WSGIPythonPath /var/www/Ullmannite-Staging

<VirtualHost *:80>
  # WSGI Stuff
  WSGIScriptAlias /beta /var/www/Ullmannite-Staging/Ullmannite/wsgi.py

  # Identification
  ServerName ialexander.io
  ServerAdmin Alexander2475914@gmail.com

  # Public files
  Alias /assets /var/www/Ullmannite-Staging/public

  # Logs
  ErrorLog ${APACHE_LOG_DIR}/iAlexander-Staging-Error.log
  CustomLog ${APACHE_LOG_DIR}/iAlexander-Staging-Access.log combined

  # Access
  DocumentRoot "/var/www/Ullmannite-Staging/public"

  <Directory "/var/www/Ullmannite-Staging/Ullmannite">
    <Files "wsgi.py">
      Require all granted
    </Files>
  </Directory>

  <Directory "/var/www/Ullmannite-Staging/public">
    Require all granted
  </Directory>
</VirtualHost>

我已经为此苦苦挣扎了好几个星期了。最初在000-ialexander-staging.conf 我有WSGIScriptAlias / /var/www/Ullmannite-Staging/Ullmannite/wsgi.pyServerName beta.ialexander.io,但这并没有给我我需要的东西。我不记得到底发生了什么,因为那是大约两周前的事了。

目前我禁用了000-ialexander-staging.conf,因为它破坏了另一个(ialexander.conf)。但是,当我启用000-ialexander-staging.conf 并访问http://ialexander.io/beta 时,我看到了生产站点。

我知道有一个小故障,您必须按顺序拥有具有 WSGIScriptAlias 值的网站。如果我有第一个 WSGIScriptAlias 设置为 / 在第二个之前它会先发送那个。这就是我用000- 前缀命名000-ialexander-staging.conf 的原因。我想确保 Apache 首先读取那个,因为它的 WSGIScriptAlias 值为 /beta

为什么会发生这些事情,我怎样才能让生产站点返回 ialexander.io 而暂存站点返回 beta.ialexander.io

【问题讨论】:

  • 我更像是一个 nginx 人,但是当你在做 WSGIScriptAlias / /var/www/Ullmannite-Staging/Ullmannite/wsgi.pyServerName beta.ialexander.io 时,你做得对。当你这样做时发生了什么才是真正的问题。所以这样做并发布之后发生的事情。
  • 当我这样做时,ialexander.io 的行为正常,但是当我访问 beta.alexander.io 时,它会返回一个不同的网站。它返回一个我为学校制作的关于意大利的网站。如果您访问beta.ialexander.io,您可以看到这些.conf 文件的行为。这是要点:gist.github.com/Arcrammer/256ad69a5ccc076fe657de505b83fa8a

标签: python django apache mod-wsgi wsgi


【解决方案1】:

这是我在 Windows 的一个 httpd.conf 文件中所做的:

*注:

  1. NO WSGIPythonPath outside VirtualHosts - 如果存在,两个 VirtualHosts 不能有不同的 python-django 配置
  2. 有两个独立的 django 项目
  3. 我们要分离的域是(www.)ialexander.iobeta.ialexander.io
  4. 没有使用 virtualenv。 (我不确定这是否会成为问题......)

    # for the public site
    <VirtualHost *:80>
    DocumentRoot "/var/www/Ullmannite/public"
    ServerName ialexander.io 
    ServerAlias www.ialexander.io 
    
    WSGIScriptAlias / /var/www/Ullmannite/Ullmannite/wsgi.py
    # ...other things the same...
    
    </VirtualHost>
    
    # for the staging site
    <VirtualHost *:80>
    DocumentRoot "/var/www/Ullmannite-Staging/public"
    ServerName beta.ialexander.io 
    
    WSGIScriptAlias / /var/www/Ullmannite-Staging/Ullmannite/wsgi.py
    # ...other things the same...
    
    </VirtualHost>
    

【讨论】:

  • 当我在VirtualHosts 中有那些WSGIPythonPaths 时,我收到错误AH00526: Syntax error on line 3 of /etc/apache2/sites-enabled/ialexander.conf: WSGIPythonPath cannot occur within &lt;VirtualHost&gt; section。什么是虚拟环境?我一直听说这件事,我曾尝试安装一次,但失败了。除此之外,您发布的.conf 是我已经拥有的。
  • 哦,是的,WSGIPythonPath 不能在VirtualHost 中;这就是为什么我从未在配置中使用它的原因。我要解决的是应该使用不同的ServerNames……如果你没有写错的话,这些在你的conf中是一样的。
  • 另外virtualenv是一个独立的python环境。如果您真的不知道它是什么,this instruction 可能会有所帮助。
猜你喜欢
  • 2014-06-29
  • 2023-03-28
  • 2011-12-15
  • 2021-01-20
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
相关资源
最近更新 更多