【问题标题】:Running a Docker container on Apache2在 Apache2 上运行 Docker 容器
【发布时间】:2021-11-13 18:21:18
【问题描述】:

我有一个服务器,我在其中托管多个应用程序。它们都可以通过相同的服务器名称在自己的子目录中访问,因此我的应用程序 foo 位于 www.servername.com/foobar 位于 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>

我认为配置正在到达正在运行的容器,因为当我转到 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 应用程序可以访问静态文件?

【问题讨论】:

    标签: docker flask apache2


    【解决方案1】:

    听起来在/baz 下运行的网站不知道它在哪里运行,因此在/ 下呈现URL。您有两种选择:

    1. 使用子域:baz.servername.com。那么 Flask 应用就可以随意使用/ 而不冲突了。
    2. 让 Flask 应用知道它们在哪里提供服务,因此您的 Flask 应用配置为使用 /baz 为其提供的每个 URL 加上前缀。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-04
      • 2020-09-07
      • 2017-02-01
      • 2017-09-27
      • 2023-04-05
      • 1970-01-01
      • 2017-02-21
      相关资源
      最近更新 更多