Apache mod-proxy ProxyErrorOverride для определенных шаблонов URL - PullRequest
12 голосов
/ 28 сентября 2011

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

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

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

Ответы [ 3 ]

2 голосов
/ 14 апреля 2013

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

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

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

1 голос
/ 23 апреля 2015

Для вопроса 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>
0 голосов
/ 27 июня 2019

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

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

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

...