如何基于子域运行两个单独的Django站点?

2024-05-14 13:52:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个Django网站。一个是中转站,另一个是生产。我希望暂存站点在beta.ialexander.io可见,生产站点在ialexander.io可见。我将mod_wsgi与Apache一起使用。以下是两个.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返回?你知道吗


Tags: pyiowsgi站点varconfwwwpublic
1条回答
网友
1楼 · 发布于 2024-05-14 13:52:49

下面是我在一个适用于Windows的httpd.conf文件中所做的操作:

*注:

  1. VirtualHost之外没有WSGIPythonPath如果存在,两个VirtualHost不能有不同的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>
    

相关问题 更多 >

    热门问题