기존 레거시 시스템과 Rails 기반의 새로운 애플리케이션 사이에서 프록시를 사용하는 nginx를 사용하여 역 프록시를 생성합니다. 특정 URL과 일치하지 않거나 요청 본문에 특정 매개 변수가없는 경우를 제외하고 기본적으로 모든 트래픽을 Rails 사이트에 보냅니다. 그러나 URL이 기존 조건과 일치하는 경우가 있지만 특정 매개 변수가있는 경우 새 시스템으로 리디렉션해야합니다. 예를 들어, 우리는 URL이 /index.cfm?fuseaction=search
인데, 이는 보통 레거시 시스템으로 보내지 만, fuseaction=search
이 포함되어 있으므로 /search/events
으로 새 시스템으로 리디렉션해야합니다. 다음 구성을 작성했습니다. 내가 nginx를 시작하려고 할 때Nginx 역방향 프록시에서 URI로
upstream legacy {
server 10.0.0.1:80;
}
upstream rails {
server 10.0.0.2:80;
}
server {
listen 0.0.0.0:80;
server_name mydomain.com
root /usr/share/nginx/html;
index index.html index.htm;
location/{
proxy_pass http://rails;
if ($request_body ~* fuseaction(?!=public\.search(_all(_by_type)?)?))
{
proxy_pass http://legacy;
}
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* /(index.cfm|images|uploads|admin|htmlArea|innovastudio|js|scripts|w3c)*$ {
proxy_pass http://legacy;
if ($request_body ~* fuseaction=public\.search(_all(_by_type)?)?)
{
proxy_pass http://rails/search/events;
}
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
그러나, 나는 다음과 같은 오류 얻을 :
"proxy_pass" may not have URI part in location given by regular expression, or inside named location, or inside the "if" statement, or inside the "limit_except" block in /etc/nginx/sites-enabled/default:56
내가 오류가 무슨 말을 이해를하지만, 나는 그것을 해결하는 방법을 잘 모르겠습니다. 어쩌면 proxy_pass
은 내가 필요로하는 것이 아닐까요? 어쩌면 proxy_redirect
을 사용해야합니까? 이 문제를 해결할 수있는 방법에 대한 도움을 주시면 감사하겠습니다.
답변 해 주셔서 감사합니다. 나는 이미 그것을 알아 냈다. 그러나 나는 나의 자신의 질문에 여기에서 대답하는 것을 잊었다. 대답은 재 지정을 사용하여 리디렉션을 수행하는 것이 었습니다. –
오, 예, 답 중 일부가 정확합니다. 나는'args'로 전환해야했다. 내가 말할 수있는 것에서'request_body'는 항상 비어 있거나 null이었습니다. –
나의 기쁨, 예, 쓸데없는 점, 나는 그것을 놓쳤다. $ request_body는 게시물이 아니면 다량을 포함하지 않을 것입니다. 다행 이군요. Rgds .... Hoonto/Matt – hoonto