Назад | Перейти на главную страницу

ProxyPreserveHost по индивидуальным правилам прокси-доступа

У меня есть два правила proxypass на моем веб-хосте: одно указывает на локальный экземпляр varnish для целей кэширования, для которого я хочу включить ProxyPreserveHost, а другое указывает на сторонний размещенный сайт, для которого я хочу отключить ProxyPreserveHost. Могу ли я сделать это для каждого правила / прохода?

В Apache 2.2 нет - ProxyPreserveHost директива действует только в конфигурации сервера или контекстах виртуального хоста; вам нужно другое ProxyPass утверждения находиться на разных виртуальных хостах.

В Apache 2.4 да - добавлен контекст каталога для директивы, так что теперь вы можете сделать что-то вроде:

<Location /to-varnish/>
    ProxyPreserveHost On
    ProxyPass http://127.0.0.1:8000/to-varnish/
</Location>
<Location /to-third-party/>
    ProxyPreserveHost Off
    ProxyPass http://third-party-site.com/
</Location>

Вы можете с помощью RequestHeader

ProxyPreserveHost On
<LocationMatch third-party-pattern>
   RequestHeader  set  Host  third-party-vhost-name
   ProxyPassMatch  http://third-party-server
</LocationMatch>
<LocationMatch varnish-pattern>
   ProxyPassMatch  http://varnish-server
</LocationMatch>

Я не могу проголосовать за ответ Сорина ...

В нашей локальной ситуации работает Apache 2.2, и основное приложение требует для входа в систему proxypreservehost (автор CQ / AEM), но партнер, к которому мы работаем через прокси, требует своего хоста в заголовке хоста.

Однако нам не нужно делать это с регулярным выражением, обычное <Location...> работает отлично.

Из документации (http://httpd.apache.org/docs/2.2/mod/core.html#location):

Директива ограничивает объем прилагаемых директив по URL-адресу.

Это решение работает для нас:

  <Location /[path]/ >
    RequestHeader set Host [thirdparty]
  </Location>
  RewriteRule ^/[path]/(.*) https://[thirdparty]/$1 [P,NC,L]

Это устанавливает заголовок хоста для этого запроса на имя хоста партнера.

Имея это на месте, мы можем продолжить вход в систему для автора CQ / AEM И прокси для партнерской службы, используя ожидаемый заголовок хоста.