x.com/staging을 다른 서버에 매핑
Apache에서 실행한다고 가정하면 프록시가 트릭을 수행 할 수 있습니다. Apache에서 리버스 프록시를 실행 하면 다음이 작동 할 수 있지만 테스트하지는 않았습니다.
ProxyPreserveHost on
ProxyPass /staging/ http://y.y.y.y/
ProxyHTMLURLMap http://y.y.y.y /staging
<Location /staging/>
ProxyPassReverse /
ProxyHTMLEnable On
ProxyHTMLURLMap / /staging/
# We need to peek into the HTML, so ensure we don't get gzip'd content:
RequestHeader unset Accept-Encoding
</Location>
위의 가상 폴더 /staging
는 모든 IP 주소를 다른 IP 주소 http://x.com/staging/
로 매핑합니다 /
. 여전히 x.com
호스트로 계속 사용하기 위해 ProxyPreserveHost를 추가 했습니다 .
이 모든 것은 후행 슬래시가 필요합니다. 일부 표준 재 작성은 필요할 때 추가 할 수 있습니다.
# Add trailing slash if omitted
RewriteRule ^staging$ /staging/ [R=302,L]
쿠키 공유 금지 : 전용 도메인 사용
그러나 세션 쿠키와 관련된 문제를 피하기 위해 전용 도메인을 선호합니다 x.com
. 이를 위해 staging
위의 모든 참조를 제거하십시오 . 그리고 여전히 예상 도메인 이름을 보내려면 추가 도메인 이름을 추가 할 수 있다고 가정합니다.
RequestHeader set Host x.com
이러한 전용 도메인을 사용하는 경우 Apache는 /some/page
로 등의 상대 URL을 다시 작성할 필요가 없습니다 /staging/some/page
. 그러나 이는 절대 URL을 다시 작성하는 데 실패했음을 의미하지 않을 수 있습니다 (특히 JavaScript가 관련된 경우 가능). 다시 작성 실패처럼 http://x.com/some/page
다시 http://client.mycompany.com/some/page
동일한 URL이 프로덕션 서버에 존재하며, 브라우저가 직접 있음을 가져 오는 경우 들키지 수 있습니다. 프로덕션 서버에 로그인 한 상태에서 스테이징 서버의 컨텐츠를 변경 한다고 생각 하면 이점이 될 수도 있고 재난이 될 수도 있습니다 .
.htaccess 사용
후손을 위해 이전에 .htaccess
파일 에서 다음과 같은 것을 사용할 수도 있다고 생각했습니다 .
# Does NOT work (for me). On the target server, this gets me:
# HTTP_HOST = y.y.y.y - from the proxy request? Expected x.com
# HTTP_X_FORWARDED_HOST = x.com - from Host
# HTTP_X_MY_DUMMY = x.com - from X-My-Dummy, as expected
RewriteEngine On
RequestHeader set Host x.com
RequestHeader set X-My-Dummy x.com
RewriteRule ^(.*) http://y.y.y.y/$1 [L,P]
ProxyPassReverse / http://y.y.y.y/
그러나에서 ProxyPassReverse
허용되지 않는 것 같습니다 .htaccess
. 그리고 일부 기본 테스트는 [P]
프록시가 항상 자체 Host
헤더를 추가하고 my Host
로 변환 한다는 것을 보여줍니다 X-Forwarded-Host
. 이것은 빠른 테스트에 사용한 공유 가상 호스팅과 관련이 있습니다. 그러나에서 ProxyPreserveHost
사용할 수 없습니다 .htaccess
.
Apache의 mod_proxy , mod_headers 및 mod_rewrite 설명서를 참조하십시오 .