我的 Web 应用程序位于 docker-containers 中,并开始使用docker-compose up
。设置将其公开在端口 80 上,其余部分在容器内部进行,这要感谢 traefik 等。
如果我在安装了 apache 等本地 Web 服务器的机器上启动它,它会显示“端口 80 已在使用中”并拒绝启动,这很明显。必须停止服务器。我想要一个后备/错误页面,当容器未运行时(由于错误或更新期间或其他原因),它会显示“正在建设中”或其他内容。
因此,为了更新,我必须
- docker-compose 停止/关闭
- 启动 apache
- 做我的事情
- 停止 Apache
- docker-compose up
现在我想知道是否可以简化这一点:是否有可能以非阻塞方式提供 fallback.html,或者换句话说:是否可以设置 apache 或使用另一个 web 服务器不阻塞端口 80 并允许另一个应用程序(在本例中是 docker,但对于每个为自己服务的应用程序来说,问题都是相同的)使用它,但在其他应用程序没有使用它时为它提供服务?
答案1
- 在不同的端口上公开你的应用程序
- 在主机上将 Apache 配置为反向代理
- 使用ErrorDocument 指令显示您的自定义信息页面
这是我针对这种情况使用的配置:
<VirtualHost *:443>
ServerName host.example.com
DocumentRoot /var/www/html
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorDocument 502 /error_503.php
ErrorDocument 503 /error_503.php
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /app/ http://localhost:9090/
ProxyPassReverse /app/ http://localhost:9090/
# ... rest of the configuration
</VirtualHost>
PHP 脚本在计划停机期间显示的消息与计划停机之外显示的消息不同。