좋은 하루 되세요. 예를 들어보겠습니다.
/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>
이 블록은 내 문제를 해결했습니다. 감사해요.