将 Docker 与 Apache WSGI 一起与 Apache 一起运行

将 Docker 与 Apache WSGI 一起与 Apache 一起运行

我需要在一台服务器上同时运行 Docker 和 Apache。Apache 目前有几个虚拟主机,而 Docker 上有带有特定 Python 版本的 Apache 以及 WSGI。

我需要将它们一起设置,而无需更改已存在的虚拟主机的大量配置。基本上,我需要将容器中的端口 80 转发为 Apache 虚拟主机或类似的东西。

有任何想法吗?

答案1

听起来你想要的是类似这样的东西:

<VirtualHost *:80>
ServerName host.example.com
ProxyPass / http://docker.example.com:1234
ProxyPassReverse / http://docker.example.com:1234
</VirtualHost>

替换host.example.com为虚拟主机的实际主机名。

替换docker.example.com为 Docker 主机的实际主机名或 IP。如果是同一主机,则可以使用localhost

将其替换1234为 Docker 为运行 WSGI 应用程序的容器导出的端口。

您的 WSGI 应用程序在代理时必须注意前端 Apache 设置的X-Forwarded-ForX-Forwarded-Host头。如果您的 WSGI 应用程序无法做到这一点,那么最好改用 mod_wsgi,因为它具有内置支持来处理这个问题。

mod_wsgi 的 Docker 映像可以在以下位置找到:

您需要向 mod_wsgi-express 提供的附加选项包括:

--trust-proxy-header X-Forwarded-For
--trust-proxy-header X-Forwarded-Host

如果没有进行修复,以便在 WSGI 环境中或通过 WSGI 应用程序以其他方式更新原始虚拟主机名和端口,则 WSGI 应用程序在构建用于页面和响应标头的 URL 时将不会生成正确的值。

如果您想要知道更多,那么您就必须解释得更清楚一些。

如果您想使用 mod_wsgi Docker 镜像,请参阅 Docker Hub 页面及其链接的博客文章。如果需要更多帮助,请跳转到 mod_wsgi 邮件列表。


有关将 Apache 代理到使用 mod_wsgi 的后端 Python 网站的常见问题的更多信息,请参阅:

相关内容