Apache HTTPD перезаписывает серверный прокси-сервер, ошибка HTTP 500–503

У меня есть два варианта использования:

  1. HTTPD - это прокси для приложения Tomcat

  2. HTTPD - это прокси для приложения PHP

Для обеспечения соответствия требованиям и безопасности все ошибки 50x должны быть переписаны на 503 перед отправкой обратно клиенту. Выявление 50-кратных ошибок приводит к утечке информации о вашем приложении, поэтому это плохая практика.

Я все еще хочу видеть 500 в файлах журнала HTTPD, но должен переписать ошибку HTTP, отправленную обратно клиентам.

Ограничения:

  1. Использование о внешней программе или другом приложении не может быть и речи, например, varnish, pound, nginx и др.

  2. Я не хочу отправлять обратно страницу с ошибкой, мне нужно только переписать статус 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
0
задан 8 July 2019 в 07:32
1 ответ

Эврика!!

После того, чтобы чинить несколько другой *обмениваются сообщениями, у меня есть осуществимое решение; укажите ошибочный документ для бэкенда 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,
  ...
}
0
ответ дан 23 November 2019 в 23:03

Теги

Похожие вопросы