首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用apache和mod_wsgi的多个django站点

使用apache和mod_wsgi的多个django站点
EN

Stack Overflow用户
提问于 2009-10-12 07:22:52
回答 2查看 53.9K关注 0票数 61

我想在使用Debian5的同一服务器下托管多个站点,假设我有site1site2site3,并假设我的ip是155.55.55.1

代码语言:javascript
复制
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默认设置:

代码语言:javascript
复制
<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>

下面是我在/opt/django/site1/apache/django.wsgi上为site1配置的wsgi

代码语言:javascript
复制
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一样提供服务

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-12 10:13:05

您的ServerName/ServerAlias指令错误。ServerName应为主机名。您可能应该直接删除ServerAlias。

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

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

代码语言:javascript
复制
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>

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

请务必阅读:

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代码只需要是线程安全的。除了上面的配置之外,还可以将WSGIDaemonProcess/WSGIProcessGroup添加到每个Django VirtualHost,其中每个VirtualHost的守护进程组的名称是不同的。

代码语言:javascript
复制
<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

票数 108
EN

Stack Overflow用户

发布于 2013-11-02 20:16:44

将所有站点配置放在一个地方很好,但是Debian有自己的概念,它将它们分别放在/etc/apache2/ virtualHost -available中的每个站点的一个文件中,通过在../sites-enabled中对它们进行符号链接来激活它们。通过这种方式,服务器管理员还可以为每个站点管理员unix用户分配对配置文件的单独访问权限,脚本可以检查站点是否处于活动状态等。

基本上,对于Django-Admin安装来说,有一个集中的not to会很好,目前大量独立的文档、链接和博客文章对Django的扩散没有真正的帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1553165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档