运行 Apache2 上的 Docker 容器

Running a Docker container on Apache2

我有一台托管多个应用程序的服务器。它们都可以通过相同的服务器名称在它们自己的子目录中访问,因此我的应用程序 foo 位于 www.servername.com/foo 并且 bar 位于 www.servername.com/bar 等等。这些应用程序中的大多数都是 Flask 应用程序,其路由和静态文件通过 apache VirtualHost *:443 到 运行 SSL 配置。

我在服务器上得到了另一个 Flask 应用程序,baz,运行,它被配置为旋转成两个 Docker 容器,一个用于应用程序,一个用于对于数据库。我已经设法调整我的 apache .conf 文件如下:

<VirtualHost *:443>
    ServerName www.servername.com

    # some additional config for my other apps, in Directories and static aliases

    ProxyPreserveHost On
    SSLProxyEngine On
    <Proxy *>
        Allow from *
    </Proxy>
    ProxyPass "/baz" "http://<IP address>:5000"
    ProxyPassReverse "/baz" "http://<IP address>:5000"
</VirtualHost>

我认为配置正在到达 运行ning 容器,因为当我转到 www.servername.com/baz 时,它会重定向到 www.servername.com/login。它 应该 重定向到 www.servername.com/baz/login,但显然有些地方不对劲。 如何让代理正确引导所有 baz 流量通过 /baz 子目录?

此外,我可以手动导航到 www.servername.com/baz/login 以查看 baz 应用程序的登录页面,但它似乎没有加载 CSS,所以我假设静态文件没有被加载。 我是否也需要为这些静态文件设置别名,就像我对其他非 Docker Flask 应用程序所做的那样? 如果需要,我通常使用的标准格式:

Alias baz/static /path/to/baz/static

不工作。一时兴起,我也尝试了一些更奇怪的东西,看看它是否有效:

Alias "baz/static" "http://<IP address>:5000/static"

但这也没有用。也许可以通过解决上面的代理路由问题来解决,但是我怎样才能使 baz 应用程序可以访问静态文件?

听起来 运行 在 /baz 下的网站不知道那是 运行 的位置,因此在 [=11= 下呈现 URLs ] 反而。您有几个选择:

  1. 使用子域:baz.servername.com。然后 Flask 应用程序可以自由使用 / 而不会发生冲突。
  2. 让 Flask 应用知道它们在何处服务,因此您的 Flask 应用配置为使用 /baz 为它服务的每个 URL 添加前缀。