RewriteCond를 사용하는 Apache 조건부 역방향 프록시

RewriteCond를 사용하는 Apache 조건부 역방향 프록시

모바일 버전 페이지가 있는 웹사이트가 있는데, 내 웹사이트가 역방향 프록시 뒤에 있으므로 방문자에게 표시할 버전을 결정할 수 있는 조건부 함수가 필요합니다. 나는 Apache 2.4를 사용하고 있는데 ProxyPass와 ProxyReverse는 "If - Elseif" 문 안에 있을 수 없으므로 RewriteCond를 사용해 보았지만 성공하지 못했습니다.

여기 내 VirtualHost가 있습니다.

<VirtualHost *:80>
ServerName MyWebsite.com
ServerAlias www.ReverseProxy/ ReverseProxy/m/
ProxyPreserveHost On
RewriteEngine On
RequestHeader set "Host" "MyWebsite.com"

#Show mobile version if visitors used mobile device
RewriteCond %{HTTP_USER_AGENT} "android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos" [NC]
ProxyPass / http://MyWebsite.com:80/m/
ProxyPassReverse / http://MyWebsite.com:80/m/

#Show desktop version if not a mobile device
RewriteCond %{HTTP_USER_AGENT} "!(android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos)" [NC]
ProxyPass / http://MyWebsite.com:80/
ProxyPassReverse / http://MyWebsite.com:80/
</VirtualHost>

위의 VirtualHost를 사용하면 내 역방향 프록시가 모바일 버전만 표시합니다. 이 문제를 해결하는 방법은 무엇입니까? 작동하려면 무엇을 추가/변경해야 합니까?

답변1

다른 모듈에서는 조건부 역방향 프록시 혼합 지시문을 수행할 수 없습니다.

이 경우 올바른 방법은 mod_rewrite를 사용하는 것입니다.

RewriteCond %{HTTP_USER_AGENT} "android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos" [NC]
RewriteRule ^/(.*) http://MyWebsite.com:80/m/$1 [P,L]
ProxyPassReverse / http://MyWebsite.com:80/m/

여기서 핵심은 리디렉션 대신 mod_rewrite 프록시를 만드는 플래그 "P"입니다.

또한 이 지시문은 처음에 역방향 프록싱 중인 백엔드에서 오는 리디렉션을 처리하는 완전히 다른 작업을 수행하기 때문에 여전히 ProxyPassReverse를 사용해야 합니다.

관련 정보