通常情况下,我们会将 Django 项目部署在不同的域名或子域名下,也就是一个项目对应一个域名。但是,也存在一种情况是多个完全不同的 Django 项目需要部署在同一个域名下,并且每个项目拥有不同的 URL 路径。 这种部署方式可以方便地在同一台服务器上开发和测试多个 Django 项目,只需访问不同的 URL 即可。下面是一些常见的问题:
- 如何在 Apache 下使用 mod_python 或 mod_wsgi 设置多个 Django 项目?
- 如何在 urls.py 中进行相应的配置?
- 如何设置 Apache 的配置文件和虚拟环境?
2、解决方案
方法一:使用多个应用程序 这种方法适用于项目里面有多个应用程序的情况。可以将所有应用程序放在同一个 Django 项目中,然后在 urls.py 中分别配置每个应用程序的 URL 路径。这种方式的好处是项目管理起来比较简单,也不需要做额外的配置。
方法二:使用子域名 这种方法适用于项目之间关联性较小的情况。可以为每个项目创建一个子域名,然后将项目部署到相应的子域名下。这样,每个项目都有自己的域名,可以通过不同的子域名来访问不同的项目。
方法三:使用多个 WSGI 脚本 这种方法适用于每个项目都是独立的应用程序的情况。可以为每个项目创建一个单独的 WSGI 脚本,然后在 Apache 的配置文件中分别配置这些脚本。这样,每个项目都可以独立运行,并且可以通过不同的 URL 路径来访问。
方法四:使用 Apache 中的 mod_wsgi 这种方法适用于在 Apache 中使用 mod_wsgi 来部署 Django 项目。可以将每个项目部署到不同的 Apache 虚拟主机下,然后在虚拟主机中配置相应的 WSGI 脚本。这样,每个项目都可以独立运行,并且可以通过不同的 URL 路径来访问。
以下是一些具体的配置示例:
Apache 配置
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
WSGIScriptAlias /project1 /path/to/project1/apache/project1.wsgi
Alias /project1/media /path/to/project1/media
Alias /project1/admin_media /path/to/project1/venv/lib/python2.6/site-packages/django/contrib/admin/media
<Directory /path/to/project1/apache>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName example2.com
ServerAlias www.example2.com
WSGIScriptAlias /project2 /path/to/project2/apache/project2.wsgi
Alias /project2/media /path/to/project2/media
Alias /project2/admin_media /path/to/project2/venv/lib/python2.6/site-packages/django/contrib/admin/media
<Directory /path/to/project2/apache>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
Django 配置
# settings.py
MEDIA_URL = 'http://192.168.0.1/gallery/media/'
ADMIN_MEDIA_PREFIX = '/gallery/admin_media/'
SESSION_COOKIE_PATH = '/gallery'
LOGIN_REDIRECT_URL = '/gallery/'
LOGIN_URL = '/gallery/accounts/login/'
LOGOUT_URL = '/gallery/accounts/logout/'
# urls.py
from django.conf.urls.defaults import patterns, include
urlpatterns = patterns('',
url(r'^gallery/', include('gallery.urls')),
url(r'^blog/', include('blog.urls')),
)