nginx에서 경로를 사용할 때 역방향 프록시가 작동하도록 하는 데 문제가 있습니다. 내가 하려는 것은 애플리케이션에 대해 하나의 주소를 갖고 경로로 환경을 지정하는 것입니다. 경로에 따라 다른 서버를 가리킵니다. 직접 링크를 사용할 때 역방향 프록시가 작동하도록 할 수 있지만 경로를 사용하면 404 오류가 발생합니다.
app.foo.bar/dev = 404 오류 devapp.foo.bar = 성공
app.foo.bar/dev에서 내가 무엇을 잘못했나요?
다음은 작동하는 역방향 프록시 설정이지만 사용하고 싶지 않습니다.
server {
listen 80; # DEV Application Proxy
server_name devapp.foo.bar;
location / {
proxy_pass http://appserver.foo.bar:7010;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
port_in_redirect off;
proxy_redirect http://appserver.foo.bar:7010/ /;
proxy_connect_timeout 300;
}
}
다음은 경로를 사용하여 수행하려는 작업의 일부이지만 404 오류가 발생합니다.
# APP Environment Proxy
server {
listen 80;
server_name app.foo.bar;
location /dev {
proxy_pass http://appserver.foo.bar:7010;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
port_in_redirect off;
proxy_redirect http://appserver.foo.bar:7010 /;
proxy_connect_timeout 300;
}
}
이런 유형의 설정을 Google에서 검색했지만 해결책을 찾을 수 없습니다. 도움을 주셔서 미리 감사드립니다.
답변1
가 있으면 proxy_pass http://appserver.foo.bar:7010;
nginx는 정규화된 URI를 백엔드에 전달된 요청 URL에 추가합니다.
따라서 을(를) 요청하면 http://app.foo.bar/dev
요청이 로 이동합니다 http://appserver.foo.bar:7010/dev
. 개발 서버에 이 경로가 없으면 nginx가 클라이언트에 반환하는 404를 반환합니다.
http://app.foo.bar/dev
로 시작하는 모든 요청을 이동하여 http://appserver.foo.bar:7010
나머지 모든 URI가 백엔드 서버 URI에 추가되도록 하려면 다음 구성을 사용할 수 있습니다.
location ~ ^/dev(.+)$ {
proxy_pass http://appserver.foo.bar:7010$1$is_args$args;
...
}
따라서 정규식을 사용하여 변수에 대한 부분을 캡처한 /dev
다음 해당 변수를 경로 끝에 추가합니다 proxy_pass
.