在不运行Django的站点中使用mod_wsgi为Django应用提供服务

3

我正在逐个应用使用Django重新编写网站。服务器是RedHat,运行Apache 2,并安装了mod_wsgi。一切都很完美。

如果我访问http://www.example.com/,我会看到已经存在的主站点(使用PHP编写)。

我已经成功地运行了mod_wsgi。如果我访问http://www.example.com/django/,我会进入我的Django主页。

我有几个应用程序能够正常工作:

所有反向URL查找功能均可正常工作,一切都很好。

在Apache的httpd.conf文件中的全局条目为:

WSGIScriptAlias /django /path/to/django/mysite/mysite/apache/django.wsgi

然而,当我将其投入生产时,我不希望URL中包含/django部分。
因此,对于http://www.example.com/software的请求将运行Django软件应用程序。
对于http://www.example.com/newsletter的请求将运行Django通讯应用程序。
我目前无法使http://www.example.com/重定向到根Django wsgi应用程序 - 这可能会在几个月后整个网站Django重写完成时发生。
那么,有什么想法可以使我的Django应用程序在当前设置中工作吗?
我是否需要创建每个应用程序的wsgi文件(例如:/path/to/django/mysite/mysite/apache/software.wsgi和/path/to/django/mysite/mysite/apache/newsletter.wsgi),并在httpd.conf文件中创建每个应用程序的条目?比如:
WSGIScriptAlias /software /path/to/django/mysite/mysite/apache/software.wsgi
WSGIScriptAlias /newsletter /path/to/django/mysite/mysite/apache/newsletter.wsgi

我似乎找不到太多关于这种特定设置的具体文档。大多数文档都假定您使用一个主要的wsgi文件和Django(通过urls.py)来代理所有请求。我很希望这对我来说也是这样,但现在这是不可能的。

可能是需要我处理一些Apache指令kung-fu。如果是这种情况,请让我知道。

谢谢。

2个回答

2
我了解您正在逐步推出www.example.com的新版本。是否考虑将整个Django项目设置在另一个新的Apache虚拟主机容器中,使用像new.example.com这样的新子域名?您的根Django应用程序可从http://new.example.com访问,软件应用程序可从http://new.example.com/software等访问。对于主域www.example.com,只需设置重定向即可:
www.example.com/django -> new.example.com
www.example.com/software -> new.example.com/software
www.example.com/newsletter -> new.example.com/newsletter

在切换之前,您可以在与切换后相同的URL结构上测试整个项目,而切换只需要替换两个虚拟主机中的ServerName指令。


谢谢!那是一个好主意。我会看看我们是否可以建立一个子域名并运行。非常感谢。 - tatlar
这解决了问题 - 谢谢@Simon!将您的答案标记为正确。 - tatlar

0

我曾经遇到过类似的问题,只不过方向相反。我想用 PHP 安装来替换 Django 的某个部分。

在 Apache 虚拟主机配置中使用以下代码:

WSGIScriptAliasMatch ^(/(software|newsletter)) /path/to/django/mysite/mysite/apache/django.wsgi$1

替代

WSGIScriptAlias /software /path/to/django/mysite/mysite/apache/software.wsgi
WSGIScriptAlias /newsletter /path/to/django/mysite/mysite/apache/newsletter.wsgi

urls.py中,让Django相信挂载点是根URL /,像这样:
...
url(r'^software/', include('software.urls')),
url(r'^newsletter/', include('newsletter.urls')),
...

这样,当您完成网站并希望从django提供包括根URL在内的所有内容时,您只需要替换WSGIScriptAliasMatch条目即可。

WSGIScriptAlias / /path/to/django/mysite/mysite/apache/django.wsgi

就这样了。

请查看以下问答以获取更多信息:

Django(wsgi)和WordPress共存于Apache虚拟主机中

重新配置Apache,从新的php源和特定的子URL从旧的Django站点提供网站根目录


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接