Nginx를 대신 사용하기 위해 흥미로운 Apache mod_rewrite 설정을 사용하여 리버스 프록시를 변환하려고합니다 (외부 우려 때문에 Apache에서 Nginx로 이동하고 있으며이 부분을 제외한 모든 것이 잘 작동합니다).
내 원래 설정은 HTTP 쿠키 (일부 응용 프로그램에서 설정)를 읽고 그 값에 따라 역방향 프록시를 다른 백엔드로 보냅니다. 그것은 다음과 같이 갔다 :
RewriteCond %{HTTP_COOKIE} proxy-target-A
RewriteRule ^/original-request/ http://backend-a/some-application [P,QSA]
RewriteCond %{HTTP_COOKIE} proxy-target-B
RewriteRule ^/original-request http://backend-b/another-application [P,QSA]
RewriteRule ^/original-request http://primary-backend/original-application [P,QSA]
Nginx를 사용하여 동일한 결과를 얻으려고하는데 초기 구성은 다음과 같습니다 (여기서 "proxy_override"는 쿠키의 이름입니다).
location /original-request {
if ($cookie_proxy_override = "proxy-target-A") {
rewrite . http://backend-a/some-application;
break;
}
if ($cookie_proxy_override = "proxy-target-B") {
rewrite . http://backend-b/another-application;
break;
}
proxy_pass http://primary-backend/original-application;
}
그러나 그렇지 않았습니다. Nginx가 기본 프록시를 작성하여 쿠키를 기반으로 무언가를 리디렉션하여 쿠키를 읽을 수 있는지 확인하려고 시도했지만 쿠키가 ${cookie_proxy_override}내용을 잘 읽지 만 if항상 실패하는 것처럼 보입니다.
Rikih의 대답에 따르면 다음 시도는 다음과 같습니다.
location /original-request {
if ($http_cookie ~ "proxy-target-A") {
rewrite . http://backend-a/some-application;
break;
}
if ($http_cookie ~ "proxy-target-B") {
rewrite . http://backend-b/another-application;
break;
}
proxy_pass http://primary-backend/original-application;
}
이제 if블록이 활성화 된 것을 볼 수 있지만 요청을 프록시 처리하는 대신 지정된 URL로 302 리디렉션을 반환합니다. 이것은 내가하려는 것이 아닙니다. 서버가 필요합니다. 백엔드에 요청을 투명하게 릴레이하고 원래 클라이언트에 응답을 파이프합니다.
내가 무엇을 잘못하고 있지?
if) 구현했습니다. Nginx (적어도 내 버전 : 1.0.0)는의 번호 매기기 캡처를 좋아하지 않으므로 한 가지 문제map가 있습니다~^(?P<name>[\w-]+) $name;. 그에 따라 답변을 편집했습니다.