运行 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 ] 反而。您有几个选择:
- 使用子域:
baz.servername.com
。然后 Flask 应用程序可以自由使用 /
而不会发生冲突。
- 让 Flask 应用知道它们在何处服务,因此您的 Flask 应用配置为使用
/baz
为它服务的每个 URL 添加前缀。
我有一台托管多个应用程序的服务器。它们都可以通过相同的服务器名称在它们自己的子目录中访问,因此我的应用程序 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 ] 反而。您有几个选择:
- 使用子域:
baz.servername.com
。然后 Flask 应用程序可以自由使用/
而不会发生冲突。 - 让 Flask 应用知道它们在何处服务,因此您的 Flask 应用配置为使用
/baz
为它服务的每个 URL 添加前缀。