호스트 이름과 다른 IP로 웹 사이트를 보는 쉬운 방법은 무엇입니까?


1

일부 배경 — WordPress는 액세스하는 호스트 이름 측면에서 실제로 성가 시므로 테스트 환경을 만드는 것이 다소 고통 스럽습니다 (즉, 준비를 위해 하위 도메인을 만들 수는 y.x.com있지만 WordPress는 데이터베이스의 모든 링크를 현재 상태로 설정합니다) 이하지에서 x.com그들이 최대한 빨리)는 DNS의 전환을 같이 할 곳이다. 이 문제를 해결하기 위해 / etc / hosts 파일에 별칭을 설정 했으므로 WP 설정에서 도메인 이름을 계속 변경할 필요가 없습니다.

즉, 현재 IP x및 호스트 이름으로 실행되는 라이브 사이트가 있습니다 x.com. 라이브 사이트를 실행 상태 로 유지하고 위에서 언급 한 항목을 사용하여 y호스트 이름을 통해 액세스 하는 스테이징 머신을 IP로 설정했습니다 .x.com/etc/hosts

내 질문 : 스테이징 머신을 / etc / hosts 파일을 편집하지 않고 클라이언트에게 어떻게 표시합니까? 온라인으로 iframe을 설정하고 특정 IP를 특정 호스트 이름으로 표시하는 서비스가 있습니까?

감사!

편집 : DNS 레코드를 설정하는 방법을 묻지 않습니다. 그들은 지금 당장 좋다. 주소 표시 줄에 IP를 입력하여 스테이징 머신을 탐색 할 수 있으며 모든 링크가있는 것을 제외하고 WordPress 가로 드되고 모든 것이 훌륭합니다. x.com클릭하면 라이브 / 프로덕션 사이트로 이동합니다. 로컬 컴퓨터의 hosts파일 (즉, /etc/hosts)에 항목을 넣어서이를 수정할 수 있습니다.이 파일 은 공개 DNS 레코드를 라이브 사이트에 덮어 쓰고 대신 스테이징 머신을 보여줍니다. 나는 본질적으로 내 클라이언트를 위해 쉽게 할 수있는 방법을 원합니다. 즉, hosts파일 을 편집 할 필요가 없습니다.


1
왜 DNS 레코드를 변경하지 않습니까?
Mehraban

@SAM 현재 실행중인 기존 라이브 사이트가 있고 DNS 레코드를 변경하면 오프라인 상태가됩니다.
aendrew

답변:


1

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_headersmod_rewrite 설명서를 참조하십시오 .


이 설정을 가상 호스트로 설정했는데 작동하지 않는 것 같습니다 y.y.y.y. 두 경우 모두 준비 시스템의 IP입니까? 그래도 확실한 접근법처럼 보입니다. 나는 Nginx와 함께 과거에 비슷한 일을했습니다.
aendrew

예, @aendrew, yyyy는 준비의 IP 주소입니다. 오류가 있습니까? (내일, 지금부터 10 시간 이상 자세히 살펴볼 수 있습니다 ...)
Arjan

@aendrew, 내 테스트도 실패했습니다. 수정 된 답변을 참조하십시오.
Arjan

Nginx의 경우이 예제 가 도움 될 수 있습니다. 물론 Nginx는 변경하려고 할 때 proxy_set_headerApache 와 동일한 문제를 표시 RequestHeader set할 수 있습니다 Host.
Arjan

@aendrew?
Arjan

1

동일한 호스트 이름을 다른 IP에 바인딩 할 수 없습니다. 도메인이 준비 시스템을 가리 키도록 DNS 레코드를 편집하거나 호스트 파일을 통해 로컬 호스트 확인 변경을 수행해야합니다.

또한 예를 들어 스테이징 머신에서 웹 사이트를 열면 PHP 또는 사이트에서 실행중인 다른 언어를 통해 검사 / 조건 변수를 추가 할 수 있습니다 http://examplesite.com/?staging=true


사실이지만 하위 도메인 은 다른 IP 주소를 가질 수 있습니다. (독자가 모르는 경우를 대비하여)
Arjan

그래 아 하위 도메인도 옵션 : 수 있습니다
Saurabh 샤르마

실제로 할 수 있습니다. 그것은 종종 간단한 복원 서비스를 만드는 데 사용됩니다. 첫 번째 항목이 항상 응답하므로 여기에서 도움이되지 않습니다.
Julian Knight

@Arjan 예, 하위 도메인을 만들 수는 y.x.com있지만 WordPress는 모든 링크를 거기에서 존재하지 않는 것으로 설정 x.com하여 DNS 전환을 수행하는 즉시 연결됩니다. 아아, 나는 클라이언트로부터 사인 오프 될 때까지 그것을 할 수 없으며, 그들은 그것을 먼저 볼 필요가있다. WordPress를 설정 y.x.com한 다음에 WP_RELOCATE지시문 을 사용하면 wp-config.php모든 링크가 변경되지만 업데이트 된 덤프를 푸시 할 때마다 더 많은 DB 작업을 수행해야한다는 것을 알고 있습니다.
aendrew

@SaurabhSharma 두 사이트는 다른 컴퓨터에 있으며 proxy_pass제대로 작동하도록 Nginx 지시문을 설정해야하며 그 시점에서 Arjan의 제안에 따라 하위 도메인에 넣을 수도 있습니다. 실제로 특정 IP 주소를 볼 수있는 방법을 찾고 있지만 Host링크가 작동하고 작동 하는 특정 헤더를 보냅니다 .
aendrew

1

다른 방법은 일반적인 프록시 서버 (예 : Squid )와 /etc/hosts프록시 서버 에서 편집 한 것 입니다.

HTTP 프록시를 사용하는 경우 클라이언트 브라우저는 x.com에 대한 DNS 조회를 수행하지 않고 프록시 서버에 연결하여 x.com에 연결하도록 지시합니다. x.com을 프록시 서버의 다른 IP로 구부 렸으므로 준비 서버에서 결과를 얻습니다.


재미있는 방법 인 것 같습니다. 구성 팁이 있습니까?
aendrew

나는이 서버의 사용자 일 뿐이지 만 특별한 것은 필요하지 않습니다-기본 구성 만 필요합니다 (강화되어 모든 사람에게 개방형 프록시를 제공하지 마십시오). Arjan과 me의 대답을 결합 할 수 있습니다. 2 줄을 "proxy"와 함께 (재 작성 또는 헤더없이) 사용하고 / etc / hosts 파일을 변경하십시오.
Ronny Lindner

프록시가 DNS 조회를 수행하는 경우 HTTPS는 어떻게 작동합니까? (최신 확장 프로그램을 제외하고 SSL의 첫 번째 단계는 호스트 이름이 아닌 IP 주소만을 기반으로합니까?)
Arjan

흠, 좋은 질문-그것이 내가 사용하는 프록시로 https와 http에 확실히 작동한다는 것을 알고 있습니다. 내일 나는 구성을보고 그것에 속임수가 있는지 볼 수 있습니다.
Ronny Lindner

squid.conf 설정을 살펴본 결과 마술이 없습니다. ldap 인증 백엔드가있는 표준 squid.conf이므로 공개 프록시가 아닙니다. https 부분의 경우-어떻게 작동하는지 모르겠지만 스테이징 서버의 인증서를 가져오고 프록시 자체에 인증서가 구성되어 있지 않습니다.
Ronny Lindner
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.