gpt4 book ai didi

python - 具有 apache 和 mod_wsgi 的多个 django 站点

转载 作者:IT老高 更新时间:2023-10-28 20:23:56 24 4
gpt4 key购买 nike

我想在使用 Debian 5 的同一台服务器下托管多个站点,比如我有 site1site2site3,以及假设我的 ip 是 155.55.55.1:

site1: 155.55.55.1:80  , script at /opt/django/site1/
site2: 155.55.55.1:8080, script at /opt/django/site2/
site3: 155.55.55.1:8090, script at /opt/django/site3/

这是我的 apache 默认值:

<VirtualHost *:80>
ServerName /
ServerAlias */
DocumentRoot /opt/django/site1/
LogLevel warn
WSGIScriptAlias / /opt/django/site1/apache/django.wsgi
Alias /media /opt/django/site1/media/statics
Alias /admin_media /home/myuser/Django-1.1/django/contrib/admin/media
</VirtualHost>

<VirtualHost *:80>
DocumentRoot "/usr/share/phpmyadmin"
ServerName /phpmyadmin
Alias /phpmyadmin /usr/share/phpmyadmin
<Directory /usr/share/phpmyadmin>
Options Indexes FollowSymLinks
AllowOverride None
Order Deny,Allow
Allow from all
</Directory>
</VirtualHost>

这是我的 site1 的 wsgi 配置,位于 /opt/django/site1/apache/django.wsgi:

import os, sys
import django.core.handlers.wsgi

sys.path.append('/opt/django')
sys.path.append('/opt/django/site1')

os.environ['DJANGO_SETTINGS_MODULE'] = 'site1.settings'
application = django.core.handlers.wsgi.WSGIHandler()

如何添加 site2site3,它们是基于 Django 的站点,将像 site1 一样提供服务?

最佳答案

您的 ServerName/ServerAlias 指令错误。 ServerName 应该是主机名。您可能应该只删除 ServerAlias。

然后只需执行明显和重复的 VirtualHost/Listen 指令,只需更改文件系统中脚本的端口号和位置。

最后,不要将 DocumentRoot 设置为您的 Django 代码所在的位置,因为如果您填充 Apache 配置,它会更容易意外地公开您的源代码以供下载。因此,只需从 Django 站点的 VirtualHost 中删除 DocumentRoot 指令。

Listen 80

<VirtualHost *:80>
ServerName www.example.com
WSGIScriptAlias / /opt/django/site1/apache/django.wsgi
Alias /media /opt/django/site1/media/statics
Alias /admin_media /home/myuser/Django-1.1/django/contrib/admin/media

<Directory opt/django/site1/apache>
Order allow,deny
Allow from all
</Directory>

<Directory /home/myuser/Django-1.1/django/contrib/admin/media>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Listen 8080

<VirtualHost *:8080>
ServerName www.example.com
WSGIScriptAlias / /opt/django/site2/apache/django.wsgi
Alias /media /opt/django/site2/media/statics
Alias /admin_media /home/myuser/Django-1.1/django/contrib/admin/media

<Directory opt/django/site2/apache>
Order allow,deny
Allow from all
</Directory>

<Directory /home/myuser/Django-1.1/django/contrib/admin/media>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Listen 8090

<VirtualHost *:8090>
ServerName www.example.com
WSGIScriptAlias / /opt/django/site3/apache/django.wsgi
Alias /media /opt/django/site3/media/statics
Alias /admin_media /home/myuser/Django-1.1/django/contrib/admin/media

<Directory opt/django/site3/apache>
Order allow,deny
Allow from all
</Directory>

<Directory /home/myuser/Django-1.1/django/contrib/admin/media>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

我还添加了缺少的目录指令以允许访问静态文件。但是,您应该查看路径。

确保您阅读:

http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#Hosting_Of_Static_Files

了解更多信息。


更新 1

顺便说一句,由于您在同一个 Apache 中使用 PHP,因此最好使用 mod_wsgi 守护程序模式并将每个 Django 实例推送到其自己的单独进程中。这允许这些进程是多线程的,即使主要的 Apache 进程由于 PHP 而被迫是单线程的。与使用 prefork MPM 在嵌入式模式下在每个进程中运行多个 Django 实例相比,最终结果将使用更少的内存。您的 Django 代码只需要是线程安全的。除上述配置外,还需要为每个 Django VirtualHost 添加 WSGIDaemonProcess/WSGIProcessGroup,其中每个 VirtualHost 的守护进程组名称不同。

<VirtualHost *:80>
WSGIDaemonProcess site1 display-name=%{GROUP}
WSGIProcessGroup site1
... existing stuff
</VirtualHost>

<VirtualHost *:8080>
WSGIDaemonProcess site2 display-name=%{GROUP}
WSGIProcessGroup site2
... existing stuff
</VirtualHost>

<VirtualHost *:8090>
WSGIDaemonProcess site3 display-name=%{GROUP}
WSGIProcessGroup site3
... existing stuff
</VirtualHost>

这还允许您更轻松地重新启动每个 Django 实例,而无需重新启动整个 Apache。阅读:

http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Delegation_To_Daemon_Process http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode

关于python - 具有 apache 和 mod_wsgi 的多个 django 站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1553165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com