单个 apache 上的多个 wsgi.mod

Multiple wsgi.mod on single apache

我在 apache 上有一个 django3 应用程序 http://myapp.example.com

目前可以使用,但我想将第二个 django3 应用程序与 Anaconda.

放在同一台服务器上

可能吗?如果是这样,我应该如何为每个应用程序设置 WSGIPythonPathAlias /static/

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    ServerName myapp.example.com
    DocumentRoot "/var/www/html/myapp/current/"
    ErrorLog ${APACHE_LOG_DIR}/myapp_error.log
    CustomLog ${APACHE_LOG_DIR}/myapp_access.log combined

    <Directory /var/www/html/myapp/current/>
       Order allow,deny
       Allow from all
    </Directory>
    WSGIScriptAlias / /var/www/html/myapp/current/myapp/wsgi.py
    WSGIDaemonProcess py37 user=ubuntu group=ubuntu python-path=/home/ubuntu/anaconda3/envs/py37/lib/python3.7/site-packages
</VirtualHost>

LoadModule wsgi_module /home/ubuntu/anaconda3/envs/py37/lib/python3.7/site-packages/mod_wsgi/server/mod_wsgi-py37.cpython-37m-x86_64-linux-gnu.so

WSGIPythonHome /home/ubuntu/anaconda3/envs/py37/
WSGIPythonPath /var/www/html/myapp/current/

<Directory /var/www/html/myapp/current>
  <Files wsgi.py>
    Order allow,deny
    Allow from all
  </Files>
</Directory>

Alias /static/ /var/www/html/myapp/current/static/
Alias /media/ /var/www/html/myapp/current/media/
<Directory /var/www/html/myapp/current/static>
  Order allow,deny
  Allow from all
</Directory>

只需克隆虚拟主机并替换与新应用程序相关的路径,您可能需要移动目录别名:

Alias /static/ /var/www/html/myapp/current/static/
Alias /media/ /var/www/html/myapp/current/media/
<Directory /var/www/html/myapp/current/static>
  Order allow,deny
  Allow from all
</Directory>

进入虚拟主机。我不使用 wsgi.py,而是使用 site.wsgi。哪个运行应用程序。 其内容为:

import os
import sys
import site

# Add the site-packages of the chosen virtualenv to work with
site.addsitedir('{{PATH TO}/site-packages')

# Add the app's directory to the PYTHONPATH
sys.path.append('{PATH TO PROJECT}')

os.environ['DJANGO_SETTINGS_MODULE'] = '{PROJECT}.settings'

# Activate your virtual env
activate_env=os.path.expanduser("{PATH TO}/bin/activate_venv.py")
exec(open(activate_env).read(), dict(__file__=activate_env))

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

在我的舞台上有效的是(httpd.conf):

LoadModule wsgi_module {PATH TO}/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so

WSGISocketPrefix /var/run/wsgi

并且 pyhton path/script 在虚拟主机中而不是在主文件中设置:

WSGIDaemonProcess {GROUP} threads=1 python-home={PATH TO} python-path={PATH TO APP} user={USER}
WSGIProcessGroup {GROUP}


WSGIScriptAlias / {PATH TO FILE}/site.wsgi

如果您想使用上述设置,您可能需要在 wsgi.py 中注释启动应用程序的行