개별 프록시 패스 규칙의 ProxyPreserveHost


8

내 웹 호스트에는 두 가지 프록시 패스 규칙이 있는데, 하나는 캐싱 목적으로 로컬 바니시 인스턴스를 가리키고 ProxyPreserveHost를 활성화하고 다른 하나는 타사 호스팅 사이트를 가리키며 ProxyPreserveHost를 비활성화합니다. 어쨌든 규칙 / 패스 단위 로이 작업을 수행 할 수 있습니까?

답변:


13

Apache 2.2에서 no- ProxyPreserveHost지시어는 서버 구성 또는 가상 호스트 컨텍스트에서만 유효합니다 . ProxyPass다른 가상 호스트에 다른 명령문이 필요 합니다.

Apache 2.4에서 yes- 디렉토리 컨텍스트가 지시문에 추가 되었으므로 이제 다음과 같은 작업을 수행 할 수 있습니다.

<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>

3

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>

0

Sorin의 답변을지지 할 수 없습니다 ...

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 작성자 및 프록시에 계속 로그인 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.