У меня есть сервер Apache, на котором /
пересылка на сервер Tomcat. Когда сервер Tomcat не работает, я хочу отобразить сообщение об ошибке. Вот что у меня есть сейчас:
ErrorDocument 502 "We're down, sorry :("
Я хотел бы показать относительно насыщенный документ (забавные картинки и прочее), а не просто сообщение из одного предложения. Проблема в том, что я не могу обслуживать документы, только перенаправляю на них. Я смотрю на это документация.
Я хотел бы сохранить тот же URL, но использовать другой HTML-файл. Как это сделать?
<VirtualHost *:443>
ServerName ${DOMAIN_NAME}
ProxyRequests Off
ProxyAddHeaders On
ProxyPass /stomp http://tomcat:8080/stomp
ProxyPassReverse /stomp http://tomcat:8080/stomp
ProxyPass /.well-known http://mail.${DOMAIN_NAME}:80/.well-known
ProxyPassReverse /.well-known http://mail.${DOMAIN_NAME}:80/.well-known
ProxyPassMatch / http://tomcat:8080 retry=0 timeout=10
ProxyPassReverse / http://tomcat:8080
SSLCertificateFile /etc/letsencrypt/live/${DOMAIN_NAME}/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/${DOMAIN_NAME}/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
ErrorDocument 502 ${PROXY_ERROR_MESSAGE}
ErrorDocument 503 ${PROXY_ERROR_MESSAGE}
</VirtualHost>
Если вы указываете полный URL-адрес для документа с ошибкой, вы неявно вызываете перенаправление, потому что браузеру нужно сказать «перейти и получить страницу с ошибкой в другом месте». Однако если вы сделаете что-то вроде:
ErrorDocument /errors/my503.html
Перенаправления не будет, пока этот путь URI обслуживается непосредственно в apache. В вашей настройке, поскольку вы проксируете '/', вы должны явно исключить этот документ из проксирования обратно в tomcat следующим образом:
ProxyPass /errors/my503.html ! ErrorDocument /errors/my503.html
Вам также необходимо добавить исключения для любых компонентов страницы, используемых в HTML.
Если вы хотите обслуживать настраиваемые страницы ошибок из фактических кодов ошибок HTTP, которые поступают от tomcat (обычно коды 4xx), вам следует взглянуть на директиву ProxyErrorOverride