Django app的ProxyPass和ProxyPassReverse

时间:2012-09-27 22:34:55

标签: django apache mod-wsgi mod-proxy proxypass

我的原始Django serving question中有一个跟进问题,就是如何开发Django应用程序并从与我的主要基于PHP的站点相同的服务器上提供它们(所有这些都是我的网站从静态和PHP驱动一个Django应用程序)。

我无法使用我提供的名称服务器解决方案,而只是使用mod_wsgi在不同的端口(8000)上部署了我的Django应用程序。但是,现在我需要将Django应用程序实际集成到主站点中。在我的Apache 2.0配置文件中(比如http://www.example.com)我添加了以下ProxyPass命令(在我的mod_wsgi初始化之后):

ProxyPass        /app/newsletter     http://www.example.com:8000/app/newsletter
ProxyPassReverse /app/newsletter     http://www.example.com:8000/app/newsletter

这里我希望任何请求:

http://www.example.com/app/newsletter

将成功代理:

http://www.example.com:8000/app/newsletter

所有这一切都与世界相符。

但事实并非如此。 Apache挂起大约5分钟(制作此问题所花费的时间)然后吐出 502代理错误

Proxy Error

The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /app/newsletter/.

Reason: Error reading from remote server

在此响应后查看我的Apache 2.0错误日志,我发现如下连续错误:

[Thu Sep 27 15:25:49 2012] [error] Exception KeyError: KeyError(****,) in <module 'threading' from '/usr/lib64/python2.6/threading.pyc'> ignored

因此,mod_proxy如何与Django和/或Python一起使用似乎有些失误。我有其他Java相关的进程,我使用ProxyPass和ProxyPassReverse,他们工作正常。此外,当我不尝试应用ProxyPass时,Django应用程序都运行良好(即,当我直接在端口8000上解决它们时)。

有什么想法吗?我不觉得我在做什么特别复杂。

提前致谢。

1 个答案:

答案 0 :(得分:2)

最后,使用 mod_rewrite 是解决方案。将此添加到Apache的httpd.conf文件中:

RewriteEngine On
RewriteRule ^/app/newsletter/(.*)$ http://%{SERVER_NAME}:8000%{REQUEST_URI} [P]

一切都按预期工作。