Apache mod-proxy ProxyErrorOverride для определенных шаблонов URL

Я использую Apache 2.2 с mod-proxy, и я настроил его с помощью нескольких операторов ProxyPass для прокси с удаленного URL-адреса на локальный URL-адрес. Мне нужно, чтобы для этих проксированных URL-адресов из Apache возвращались пользовательские документы об ошибках, поэтому я установил «ProxyErrorOverride On» в своей конфигурации мод-прокси вместе с некоторыми директивами ErrorDocument (с локальным URL-путем), чтобы возвращать пользовательские страницы ошибок для нескольких кодов состояния HTTP интерес. Однако, когда возвращается код состояния, для которого я НЕ создал директиву ErrorDocument, Apache заменяет тело ответа страницей ошибки по умолчанию вместо того, чтобы оставить исходное тело ответа неповрежденным. Это не будет работать с приложением. Так что у меня действительно 2 вопроса:

1) Можно ли настроить Apache так, чтобы исходное тело ответа оставалось неизменным для определенного кода состояния, если для него не определено переопределение ErrorDocument?

2) Возможно ли, чтобы директива ProxyErrorOverride применялась только к некоторым URL-адресам в моих инструкциях ProxyPass?


person benw    schedule 28.09.2011    source источник
comment
Боюсь, что ответ: нет и нет. Если бы директива могла быть ограничена местоположением, каталогом или набором URL-адресов, то в разделе «Контекст» страницы руководства было бы что-то: http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxyerroroverride   -  person arober11    schedule 15.11.2012


Ответы (3)


Как отметил arober11 в комментарии выше:

Боюсь, что ответ: нет и нет. Если бы директива могла быть ограничена местоположением, каталогом или набором URL-адресов, то в разделе «Контекст» страницы руководства было бы что-то: httpd.apache.org/docs /2.2/mod/mod_proxy.html#proxyerroroverride

с другой стороны: вы всегда можете добавить его в mod_proxy.c самостоятельно.

person bjelli    schedule 14.04.2013

По вопросу 2: Определенно выполнимо. Это возможно с использованием внутренних перенаправлений на новый хост или порт. Краткая схема использования хостов (добавьте noErrorOverrideUrl, doErrorOverrideUrl в DNS или / etc / hosts apache-machine):

NameVirtualHost *:80
<VirtualHost *:80>
   RewriteEngine On
   RewriteRule ^(/noErrorOverrideUrl/.*) http://noErrorOverrideUrl$1 [L,P]
   RewriteRule ^(/doErrorOverrideUrl/.*) http://doErrorOverrideUrl$1 [L,P]          
</VirtualHost>

<VirtualHost *:80>
   ServerName noErrorOverrideUrl
   ProxyErrorOverride Off
   ProxyPass ...
   ...
</VirtualHost>

<VirtualHost *:80>
   ServerName doErrorOverrideUrl
   ProxyErrorOverride On
   ProxyPass ...
   ...
</VirtualHost>

Краткое описание использования портов:

Listen 80
Listen 81
Listen 82
<VirtualHost *:80>
   RewriteEngine On
   RewriteRule ^(/noErrorOverrideUrl/.*) http://server:81$1 [L,P]
   RewriteRule ^(/doErrorOverrideUrl/.*) http://server:82$1 [L,P]
</VirtualHost>

<VirtualHost *:81>
   ProxyErrorOverride Off
   ProxyPass ...
   ...
</VirtualHost>

<VirtualHost *:82>
   ProxyErrorOverride On
   ProxyPass ...
   ...
</VirtualHost>
person Jonas Andersson    schedule 23.04.2015

Вы можете обновить apache и использовать предложение If, доступное на 2.4+

<VirtualHost *:80>
  ...
  <If "%{REQUEST_URI} =~ m#^\/QA(.*)$#">
      ProxyErrorOverride Off
  </If>
  ..
</VirtualHost>

Документация

person Farid Escate    schedule 27.06.2019