ProxyPass가 404를 반환하지만 이름은 작동합니다.

ProxyPass가 404를 반환하지만 이름은 작동합니다.

좋은 하루 되세요. 예를 들어보겠습니다.

/etc/hosts에는 2개의 BalanceMember 항목이 있습니다. 물론 이러한 가상 머신을 보지 마십시오. 블랙 박스입니다. 모든 요청은 404 찾을 수 없음을 반환합니다.

    ServerName service.test.com

    SSLProxyEngine on

  <Proxy "balancer://service">
    BalancerMember https://service1.ng.com
    BalancerMember https://service2.ng.com
  </Proxy>

    ProxyPass "/" "balancer://service/"
    ProxyPassReverse "/" "balancer://service/"

/etc/hosts를 편집하고 이름을 service1.ng.com에서 service.ng.com으로 변경한 다음 conf apache를 다음으로 변경하면

    ServerName service.test.com

    SSLProxyEngine on

  <Proxy "balancer://service">
    BalancerMember https://service.ng.com
    BalancerMember https://service2.ng.com
  </Proxy>

    ProxyPass "/" "balancer://service/"
    ProxyPassReverse "/" "balancer://service/"

두 요청 중 하나는 200 OK를 반환합니다. 이해했나요? 그러나 나는 그것을 이해할 수 없습니다. 에이전트가 밸런서 중 하나에 무언가를 보내면 모든 것이 잘 작동합니다. 글쎄요, 아니면 이퀄라이저 이후인지는 모르겠습니다.

답장을 보내주셔서 미리 감사드립니다.

답변1

service1,2호스트 이름의 요청에 응답하려면 backend()에서 다른 구성 service1,2이나 다른 설정이 필요할 수 있습니다.ProxyPreserveHost.

표준 설정에서 ProxyPass는 백엔드로 프록시될 때 요청의 Host 헤더를 대체합니다. 이는 백엔드 자체 VirtualHost에 여러 구성이 있을 수 있고 어떤 것을 사용할지 결정할 수 있어야 하기 때문입니다. 이 시점에서는 원래 요청한 호스트 이름이 무엇인지 더 이상 알 수 없기 때문에 문제가 발생할 수 있습니다.

원본 서버 이름에 응답하도록 모든 백엔드를 구성하는 것은 문제를 줄이는 데 완벽하게 유효합니다. 예를 들어 페이지에 넣은 링크는 실수로 포함되거나 유사하지 않지만 프런트엔드에 httpd가 유지하는 내용 을 알리는 https://service1/설정이 필요합니다. ProxyPreserveHost on요청의 Host헤더 .

답변2

<Location "/">
    ProxyPass "https://service.ng.com/"
    ProxyPassReverse "https://service.ng.com/"
    AllowOverride None
    Order Deny,Allow
    Deny from All
    Allow from All
</Location>

이 블록은 내 문제를 해결했습니다. 감사해요.

관련 정보