我在一台 RHEL 8 机器上,使用 Apache httpd 显示多个 vHost。当返回错误代码 503 时,我想将所有请求重定向到维护页面。
我的 vHost 配置如下:
<VirtualHost *:80>
ServerName example.de
DocumentRoot "/var/www/html/gis"
RewriteEngine on
Redirect permanent ^/$ https://example.de/intelliform/ui/cases/-/gis/index#/
Redirect permanent index.html https://example.de/intelliform/ui/cases/-/gis/index#/
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
# Konfiguration für mod_proxy
ProxyPreserveHost On
ProxyPass /intelliform balancer://lb/intelliform
ProxyPassReverse /intelliform balancer://lb/intelliform
# Muss mindestens so groß sein wie LimitRequestFieldSize in intelliform.conf
ProxyIOBufferSize 16384
# ProxyTimeout erhöhen, z.B. relevant beim Publizieren von Themes
#ProxyTimeout 360
# Konfiguration für mod_jk
# HTTPS-Anfragen die im Pfad-Anteil mit "/intelliform/" anfangen ueber den Worker "intelliform" verarbeiten
#JkMount /intelliform/* intelliform
# Error Page
ErrorDocument 503 /maintenance.html
# Maintenance Page
# Redirect all request to a 503 return code when in maintenance mode
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond /var/www/maintenance/ALL -f
RewriteCond /var/www/maintenance/%{SERVER_NAME} -f
RewriteRule %{REQUEST_URI} !=/maintenance.html
RewriteRule ^ - [R=503,L]
# Optional: Fehlerseiten durch eigene Fehlerseiten ersetzen lassen
# Ab mod_jk 1.2.27 koennen Fehlerseiten die vom intelliForm Server kommen durch eigene Fehlerseiten ersetzt werden.
# http://tomcat.apache.org/connectors-doc/reference/uriworkermap.html
#ErrorDocument 403 http://www.my-server.example/forbidden.htm
ErrorDocument 404 /404.htm
# SSL Config
# SSL unter Linux
#SSLEngine on
#SSLCertificateFile /etc/ssl/certs/serverzertifikat.crt
#SSLCertificateKeyFile /etc/ssl/certs/meinschluessel.key
#SSLCACertificateFile /etc/ssl/certs/intermediate-bundle.crt
<LocationMatch "/+intelliform/admin.*">
# ohne Beschraenkung verboten
Require all denied
</LocationMatch>
# Zugriff auf intelliform
<LocationMatch "/+intelliform/+(applications|calendar|data|dwr|filechooser|j_security_check|javascripts|js|properties|autovue|rest|managers/statistic).*|/+intelliform/+[-\w]+\.(css|js|png|gif).*">
# ohne Beschraenkung erlauben
Require all granted
</LocationMatch>
<Location /services>
# ohne Beschraenkung verboten
Require all denied
</Location>
<Location /auth>
ProxyPass http://127.0.0.1:8180/auth
ProxyPassReverse http://127.0.0.1:8180/auth
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
</Location>
<Location ~ "^/auth(/admin|/*$)">
Require all granted
</Location>
# Logging unter Linux
# Erstellen Sie mit mit dem Befehl ln -s einen symbolischen Link namens logs im Verzeichnis Ihrer Webserver Installation
# welche nach /var/log/.. verweist.
ErrorLog /var/log/httpd/intelliform-error-gis.log
LogLevel debug
CustomLog /var/log/httpd/intelliform-access-gis.log combined
# Kombinierte Log-Datei
LogFormat "\"%{cache-status}e\" %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" cache_combined
CustomLog /var/log/httpd/cache-gis.log cache_combined
#ForensicLog /var/log/httpd/forensic.log
</VirtualHost>
当文件 ALL oder %{SERVER_NAME} 存在时,这应该将所有请求重定向到错误 503 代码。我的 ErrorDocument 位于 /var/www/html/gis/maintenance.html,因此是根文档。
相反,我总是收到错误 503 服务不可用,并且我的维护页面没有显示。当我调用https://example.com/maintenance.html然后我的维护页面就会显示出来。
我该如何修复此问题?
我尝试注释掉 RewriteConds 并简单地重定向到错误 503 来检查是否是配置问题:
# Maintenance Page
# Redirect all request to a 503 return code when in maintenance mode
#RewriteCond %{ENV:REDIRECT_STATUS} ^$
#RewriteCond /var/www/maintenance/ALL -f
#RewriteCond /var/www/maintenance/%{SERVER_NAME} -f
#RewriteRule %{REQUEST_URI} !=/maintenance.html
RewriteRule ^ - [R=503,L]
不幸的是,我仍然收到服务不可用的网站