У меня два варианта использования:
HTTPD - это прокси для приложения Tomcat
HTTPD - это прокси для приложения PHP
Для соответствия требованиям и безопасности все 50-кратные ошибки должны быть переписаны на 503 перед отправкой обратно клиенту. Выявление 50-кратных ошибок приводит к утечке информации о вашем приложении, поэтому это плохая практика.
Я по-прежнему хочу видеть 500 в файлах журнала HTTPD, но должен переписать ошибку HTTP, отправленную обратно клиентам.
Ограничения:
Не может быть и речи об использовании внешней программы или другого приложения, например, varnish, pound, nginx и др.
Я не хочу отправлять обратно страницу с ошибкой, мне нужно только переписать статус HTTP. т.е. изменить HTTP/1.1 500
к 503
В следующих:
[user@host]$ curl -I http://localhost:8080/500.php
HTTP/1.1 500 Internal Server Error
<OUTPUT OMITTED>
Это возможно?
Примечание: я создал страницы ошибок с помощью:
for http_status in 401 403 500 501 503; do
echo -e "<?php\nhttp_response_code(${http_status});" > ${http_status}.php
done
После того, как я сколотил несколько других * сообщений обмена, у меня есть работоспособное решение; укажите документ с ошибкой для бэкэнда 500, затем верните 503 для всех вызовов этого документа.
Этот блок кода может находиться в VirtualHost
определение:
ProxyErrorOverride on
ErrorDocument 500 /500.html
RewriteEngine on
RewriteCond %{REQUEST_URI} /500.html
RewriteRule .* - [R=503]
Источники:
Бонусные очки марионеток:
$rewrites = [
{
comment => ' Rewrite 503.html',
rewrite_cond => ['%{REQUEST_URI} /503.html'],
rewrite_rule => ['.* - [R=503]']
}
]
$error_documents => [
{ 'error_code' => '500', 'document' => '/503.html' },
{ 'error_code' => '501', 'document' => '/503.html' },
{ 'error_code' => '502', 'document' => '/503.html' },
# Creating an error document for 503 creates an infinite redirect loop
{ 'error_code' => '504', 'document' => '/503.html' },
{ 'error_code' => '505', 'document' => '/503.html' },
{ 'error_code' => '506', 'document' => '/503.html' },
{ 'error_code' => '507', 'document' => '/503.html' },
{ 'error_code' => '508', 'document' => '/503.html' },
# There is no 509: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#5xx_Server_errors
{ 'error_code' => '510', 'document' => '/503.html' },
{ 'error_code' => '511', 'document' => '/503.html' },
]
apache::vhost { $name:
...
error_documents => $error_documents,
proxy_error_override => true,
proxy_pass => [],
rewrites => $rewrites,
...
}