У меня есть два варианта использования:
HTTPD - это прокси для приложения Tomcat
HTTPD - это прокси для приложения PHP
Для обеспечения соответствия требованиям и безопасности все ошибки 50x должны быть переписаны на 503 перед отправкой обратно клиенту. Выявление 50-кратных ошибок приводит к утечке информации о вашем приложении, поэтому это плохая практика.
Я все еще хочу видеть 500 в файлах журнала HTTPD, но должен переписать ошибку HTTP, отправленную обратно клиентам.
Ограничения:
Использование о внешней программе или другом приложении не может быть и речи, например, varnish, pound, nginx и др.
Я не хочу отправлять обратно страницу с ошибкой, мне нужно только переписать статус HTTP. то есть изменить HTTP / 1.1 500
на 503
в следующем виде:
[пользователь @ хост] $ curl -I http: // localhost: 8080 / 500.php
HTTP / 1.1 500 Внутренняя ошибка сервера
<ВЫВОД ОТСУТСТВУЕТ>
Возможно ли это?
Примечание: Я создал страницы ошибок с помощью:
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,
...
}