我想在使用Debian5的同一服务器下托管多个站点,假设我有site1
、site2
和site3
,并且假设我的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>
这是我在/opt/django/site1/apache/django.wsgi
为site1
所做的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()
如何添加site2
和site3
,它们是基于Django的站点,将像site1
一样被服务?
将所有的virtualHost配置放在一个地方可以很好地工作,但是Debian有自己的概念,它在/etc/apache2/sites中的每个站点的一个文件中将它们分开,这些文件通过在../sites enabled中对它们进行符号链接来激活。 这样,服务器管理员还可以为每个站点管理员unix用户分配对配置文件的单独访问权限,脚本可以检查站点是否处于活动状态等
基本上,有一个Django管理安装的中心howto是很好的,当前大量的独立文档、链接和博客文章并不能真正帮助Django的扩散。
您的ServerName/ServerAlias指令错误。服务器名应为主机名。您可能应该删除服务器别名。
然后只需执行明显和重复的VirtualHost/Listen指令,只需更改文件系统中脚本的端口号和位置。
最后,不要将DocumentRoot设置为Django代码所在的位置,因为这样在填充Apache配置时更容易意外地公开要下载的源代码。所以,只需从VirtualHost for Django站点中删除DocumentRoot指令。
我还添加了允许访问静态文件的丢失目录指令。不过,您应该检查路径。
请确保阅读:
http://code.google.com/p/modwsgi/wiki/IntegrationWithDjangohttp://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的守护进程组的名称不同。
这还允许您更轻松地重新启动每个Django实例,而无需重新启动整个Apache。阅读:
http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Delegation_To_Daemon_Processhttp://code.google.com/p/modwsgi/wiki/ReloadingSourceCode
相关问题 更多 >
编程相关推荐