<p>您的ServerName/ServerAlias指令错误。服务器名应为主机名。您可能应该删除服务器别名。</p>
<p>然后只需执行明显和重复的VirtualHost/Listen指令,只需更改文件系统中脚本的端口号和位置。</p>
<p>最后,不要将DocumentRoot设置为Django代码所在的位置,因为这样在填充Apache配置时更容易意外地公开要下载的源代码。所以,只需从VirtualHost for Django站点中删除DocumentRoot指令。</p>
<pre><code>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>
</code></pre>
<p>我还添加了允许访问静态文件的丢失目录指令。不过,您应该检查路径。</p>
<p>请确保阅读:</p>
<p><a href="http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango" rel="noreferrer">http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango</a>
<a href="http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#Hosting_Of_Static_Files" rel="noreferrer">http://code.google.com/p/modwsgi/wiki/ConfigurationGuidelines#Hosting_Of_Static_Files</a></p>
<p>了解更多信息。</p>
<hr/>
<p>更新1</p>
<p>顺便说一句,因为您在同一个Apache中使用PHP,所以最好使用mod_wsgi守护进程模式,并将每个Django实例推送到自己的单独进程中。这允许这些进程是多线程的,即使主要的Apache进程由于PHP而被迫是单线程的。最终的结果是,与使用prefork MPM在嵌入式模式下在每个进程中运行多个Django实例相比,使用的内存要少得多。你的Django代码需要是线程安全的。除了上述配置之外,还可以将WSGIDaemonProcess/WSGIProcessGroup添加到每个Django VirtualHost,其中每个VirtualHost的守护进程组的名称不同。</p>
<pre><code><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>
</code></pre>
<p>这还允许您更轻松地重新启动每个Django实例,而无需重新启动整个Apache。阅读:</p>
<p><a href="http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Delegation_To_Daemon_Process" rel="noreferrer">http://code.google.com/p/modwsgi/wiki/QuickConfigurationGuide#Delegation_To_Daemon_Process</a>
<a href="http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode" rel="noreferrer">http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode</a></p>