我需要在一台服务器上同时运行 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-For
标X-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 网站的常见问题的更多信息,请参阅: