tat*_*lar 5 apache django mod-wsgi mod-proxy proxypass
我有一个来自我最初的Django 服务问题的后续问题,即如何开发 Django 应用程序并从与我的主要基于 PHP 的站点相同的服务器为它们提供服务(所有这些都是我的网站从静态和 PHP 驱动的网站进行更大迁移的一部分)到一系列 Django 应用程序)。
我不能完全使用我提供的名称服务器解决方案,而是使用 mod_wsgi 将我的 Django 应用程序部署在不同的端口 (8000) 上。但是,现在我需要将 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
Run Code Online (Sandbox Code Playgroud)
在这里,我希望任何请求:
http://www.example.com/app/newsletter
Run Code Online (Sandbox Code Playgroud)
将成功代理到:
http://www.example.com:8000/app/newsletter
Run Code Online (Sandbox Code Playgroud)
一切都会好起来的。
然而,这种情况并非如此。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
Run Code Online (Sandbox Code Playgroud)
在此响应后查看我的 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
Run Code Online (Sandbox Code Playgroud)
因此,mod_proxy 如何与 Django 和/或 Python 一起玩似乎有些疏忽。我有其他与 Java 相关的进程,我使用 ProxyPass 和 ProxyPassReverse 并且它们工作正常。此外,当我不尝试应用 ProxyPass 时,Django 应用程序都运行良好(即,当我直接在端口 8000 上寻址它们时)。
有任何想法吗?我不觉得我在做的事情特别复杂。
提前致谢。
最后,使用mod_rewrite是解决方案。将其添加到 Apache 的 httpd.conf 文件中:
RewriteEngine On
RewriteRule ^/app/newsletter/(.*)$ http://%{SERVER_NAME}:8000%{REQUEST_URI} [P]
Run Code Online (Sandbox Code Playgroud)
一切都按预期进行。
| 归档时间: |
|
| 查看次数: |
4924 次 |
| 最近记录: |