apache 如何使用mod_wsgi在一个域中托管多个django项目?

doinxwow  于 2022-11-16  发布在  Apache
关注(0)|答案(2)|浏览(130)

我有多个django项目,我想把它们托管在同一个域名下,例如:example.com/one<br>``example.com/one<br>
我已经搜索了各种解决方案,并找到了下面给出的链接,这对我帮助很大。Is it possible to host multiple django projects under the same domain?
从上面的阅读,我知道我需要这个mod_wsgi,但我很困惑,在哪里安装这个mod_wsgi-我需要安装在每个项目文件夹下(每个myenv分开)或它应该只安装一次。请帮助我在如何和在哪里安装这个mod_wsgi,最后如何在同一域名下托管多个项目。

另一个用户尝试了一些代码,但遇到了相同的问题,但也无法正常工作

<VirtualHost *:80>

        ServerAdmin admin@my_domain.com
        ServerName my_domain.com
        ServerAlias www.my_domain.com

        DocumentRoot /var/www/my_domain.com

        ErrorLog ${APACHE_LOG_DIR}/my_domain.com_error.log
        CustomLog ${APACHE_LOG_DIR}/my_domain.com_access.log combined

        # site_1
        Alias /site_1_project/static /var/www/my_domain.com/site_1_project/static
        <Directory /var/www/my_domain.com/site_1_project/static>
                Require all granted
        </Directory>

        Alias /site_1_project/media /var/www/my_domain.com/site_1_project/media
        <Directory /var/www/my_domain.com/site_1_project/media>
                Require all granted
         </Directory>

        <Directory /var/www/my_domain.com/site_1_project/site_1_project>
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>

        WSGIDaemonProcess site_1_project python-path=/var/www/my_domain.com/site_1_project python-home=/var/www/my_domain.com/site_1_project/django_env_site_1
        WSGIProcessGroup site_1_project
        WSGIScriptAlias /site_1_project/ /var/www/my_domain.com/site_1_project/site_1_project/wsgi.py

        # site_2
        Alias /site_2_project/static /var/www/my_domain.com/site_2_project/static
        <Directory /var/www/my_domain.com/site_2_project/static>
                Require all granted
        </Directory>

        Alias /site_2_project/media /var/www/my_domain.com/site_2_project/media
        <Directory /var/www/my_domain.com/site_2_project/media>
                Require all granted
        </Directory>

        <Directory /var/www/my_domain.com/site_2_project/site_2_project>
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>

        WSGIDaemonProcess site_2_project python-path=/var/www/my_domain.com/site_2_project python-home=/var/www/my_domain.com/site_2_project/django_env_site_2
        WSGIProcessGroup site_2_project
        WSGIScriptAlias /site_2_project/ /var/www/my_domain.com/site_2_project/site_2_project/wsgi.py

#RewriteEngine on
#RewriteCond %{SERVER_NAME} =my_domain.com [OR]
#RewriteCond %{SERVER_NAME} =www.my_domain.com
#RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
jobtbby3

jobtbby31#

mod_wsgi的安装取决于你的主机操作系统。查看说明。如果你使用的是CentOS或RedHat,我建议你看看IUS Community;它们提供了一个包含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框架的标记,你也可以删除它,但是我把它留给了一个更完整的例子。这是Apache 2.4+的语法,当他们转换到Require all granted的时候。
IUS社区(如果在RedHat/CentOS上):https://ius.io/

igetnqfo

igetnqfo2#

我会告诉你我们在项目中是如何做的。我们有一个单独的Django项目,有不同的路由。例如/players/tablet。我们在两个Docker容器中托管我们的项目。我们有NGINX作为我们的反向代理。NGINX根据路由将请求重定向到适当的容器。NGINX是公开的。但是,我不确定它对你是否有用。

相关问题