![동적 호스트 이름으로 Apache ProxyPass](https://rvso.com/image/1525415/%EB%8F%99%EC%A0%81%20%ED%98%B8%EC%8A%A4%ED%8A%B8%20%EC%9D%B4%EB%A6%84%EC%9C%BC%EB%A1%9C%20Apache%20ProxyPass.png)
동적 호스트 이름을 기반으로 하고 다른 포트를 사용하여 내부 서버로 프록시하도록 Apache를 구성하려고 합니다. 나에게는 조금 너무 복잡한 것 같습니다. 이것이 내가 가진 것입니다:
<Location /awesomewebapp>
ProxyPass http://[internalservername]:8080/awesomewebapp
ProxyPassReverse http://[internalservername]:8080/awesomewebapp
</Location>
그러나 이것은 (분명히) 역동적이지 않습니다. 나는 다시 쓰기 규칙 등을 작업해 왔지만 제대로 작동하지 못했습니다. 나에게 정말로 필요한 것은 다음과 같습니다.
^/[internalservername]/awesomewebapp
proxy internally to
http://[internalservername]:8080/awesomewebapp
미리 감사드립니다
답변1
RewriteRule을 사용하여 요청을 프록시할 수 있습니다. 그만큼mod_rewrite를 프록시로 사용하기 위한 Apache 문서다음을 보여줍니다:
설명:
mod_rewrite는 URL이 mod_proxy를 통해 다른 서버로 전달될 수 있도록 하는 [P] 플래그를 제공합니다. 여기에는 두 가지 예가 나와 있습니다. 한 예에서는 URL이 다른 서버로 직접 전달되어 마치 로컬 URL인 것처럼 제공됩니다. 다른 예에서는 누락된 콘텐츠를 백엔드 서버로 프록시합니다.
해결책:
단순히 URL을 다른 서버에 매핑하려면 다음과 같이 [P] 플래그를 사용합니다.
RewriteBase "/products/" RewriteRule "^widget/(.*)$" "의 RewriteEnginehttp://product.example.com/widget/$1" [P] ProxyPassReverse "/products/widget/" "http://product.example.com/widget/"
두 번째 예에서는 로컬에서 리소스를 찾을 수 없는 경우에만 요청을 프록시합니다. 이는 한 서버에서 다른 서버로 마이그레이션할 때 모든 콘텐츠가 아직 마이그레이션되었는지 확실하지 않을 때 매우 유용할 수 있습니다.
RewriteCond "%{REQUEST_FILENAME}" !-f RewriteCond "%{REQUEST_FILENAME}" !-d RewriteRule "^/(.*)" "http://old.example.com/$1" [P] ProxyPassReverse "/" "http://old.example.com/"
요청을 프록시하기 위해 [P] 플래그를 사용하여 조건부로 URL을 다시 작성하는 두 번째 예는 필요한 것처럼 보입니다.
답변2
이전 "솔루션"이 여전히 제대로 작동하지 않아 혼란을 방지하기 위해 삭제했습니다. 내가 원하는 방식으로는 가능하지 않은 것 같지만 하위 디렉터리 대신 하위 도메인을 사용하는 작은 해결 방법은 여전히 문제를 해결합니다.
RewriteCond %{HTTP_HOST} ([^.]+)
RewriteRule ^/(.*) http://%1:8080/$1 [P]
원천:http://www.vanbommelonline.nl/2011/10/using-apache-for-dynamic-reverse-proxy.html