【问题标题】:Serving static files using mod_wsgi-express with ProxyPass in Apache is not working在 Apache 中使用带有 ProxyPass 的 mod_wsgi-express 提供静态文件不起作用
【发布时间】:2017-01-18 17:20:21
【问题描述】:

我今天发现了mod_wsgi-express,我认为这是一个非常酷的项目。 我不敢相信部署 Python/Django Web 应用程序只需要这一条命令。

mod_wsgi-express start-server project/wsgi.py

但是,文档似乎仍然丢失(或者我没有找到?)。据我所知,官方文档here 中没有提到它。

我在同一台机器上托管了几个小站点,因此使用了 VirtualHost。所以我需要像这样将它代理到另一个端口:

<VirtualHost *:80>
    ProxyPreserveHost On
    ServerName example.com
    ProxyPass "/" "http://localhost:8000"
</VirtualHost>

到目前为止一切顺利。我正在运行 mod_wsgi-express,如下所示:

mod_wsgi-express start-server --url-alias /static /path/to/static project/wsgi.py 

你看,我正在尝试在 mod_wsgi-express 本身中设置静态文件配置。但是,不提供静态文件并给出 502 代理错误。

所以代理动态请求是有效的,但不是静态文件。直接在端口 8000 访问时,站点也是工作文件。我在这里缺少什么?

当然,我可以在 VirtualHost 本身中添加配置来提​​供这些静态文件,但如果它与 mod_wsgi-express 一起使用,它将使配置更简单,更易于部署。

【问题讨论】:

  • 为了在 mod_wsgi-express 前面设置 Apache 作为代理,您可能需要阅读 blog.dscpl.com.au/2015/06/…blog.dscpl.com.au/2015/07/… 忽略它在 Docker 中运行 mod_wsgi-express 的事实。相同的概念适用。
  • 非常感谢@GrahamDumpleton 第二篇文章确实非常详细地介绍了上述问题。在您的帖子之后,我很容易解决了这个问题。荣誉:)

标签: python django apache mod-wsgi


【解决方案1】:

感谢 Graham Dumpleton 的上述评论。尽管官方文档中没有,但他已经写了关于这个问题的详细博客文章:Redirection problems when proxying to Apache running in Docker..

虽然我没有使用 Docker,但在将请求代理到 Apache VirtualHost 的 80 或 443 以外的端口时,此解决方案是通用的。

在我上面的例子中,我在 VirtualHost 配置中缺少两个标头。所以这是新的 VirtualHost 配置:

<VirtualHost *:80>
    ServerName example.com
    ProxyPass / http://localhost:8000/
    ProxyPassReverse / http://localhost:8000/
    RequestHeader set X-Forwarded-Port 80
</VirtualHost>

这就是我们所需要的。 Graham 在他的博文中提供了很多详细信息,如果您遇到类似问题,值得一读。

【讨论】:

    猜你喜欢
    • 2017-09-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 2012-12-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    相关资源
    最近更新 更多