您的 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 代码只需要是线程安全的。除了上述配置之外,还需要将 WSGIDaemonProcess/WSGIProcessGroup 添加到每个 Django VirtualHost,其中每个 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