nginx 원치 않는 위치 리디렉션(후행 슬래시 포함)

nginx 원치 않는 위치 리디렉션(후행 슬래시 포함)

위치가 있어요

location /pass/ {
    proxy_pass http://localhost:12345/;
}

http://example.com/pass/whatever따라서 URL을 다음으로 프록시화해야 합니다 .http://localhost:12345/whatever

내가 마음에 들지 않는 점은 nginx가 자동으로 슬래시를 추가한다는 것입니다.

http://example.com/pass

http://example.com/pass/301 리디렉션을 통해 만듭니다.

이 동작을 어떻게 피할 수 있습니까? /pass후행 슬래시 없이 다른 위치로 이동하고 싶습니다 . 미리 감사드립니다!

답변1

proxy_pass끝이 있는 location경우 백엔드로 이동하지 않고 /자동 암시적 리디렉션이 발생하는 특별한 경우가 있습니다 . 이를 방지하려면 후행 슬래시 없이 301명시적을 만들어야 합니다 .location

위치가 슬래시 문자로 끝나는 접두사 문자열로 정의되고 요청이 Proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass 또는 grpc_pass 중 하나로 처리되는 경우 특수 처리가 수행됩니다. 이 문자열과 동일한 URI가 있지만 뒤에 슬래시가 없는 요청에 대한 응답으로 코드 301이 포함된 영구 리디렉션이 슬래시가 추가된 요청된 URI로 반환됩니다. 이를 원하지 않는 경우 URI와 위치의 정확한 일치를 다음과 같이 정의할 수 있습니다.

location /user/ {
    proxy_pass http://user.example.com;
}

location = /user {
    proxy_pass http://login.example.com;
}

/pass location예를 들어 기존 항목에 추가로 명시적 항목을 생성해야 합니다 /pass/. 그렇지 않으면 암시적 항목이 location /pass {return 301 /pass/…;}생성됩니다.

그러나 당신이 하려는 일을 실제로 하고 싶습니까? /pass에서 로의 리디렉션을 생략하려는 경우 /pass/상대 경로가 작동하지 않습니다. 일부 최신 브라우저에는 사용자에게 후행 슬래시가 표시되지 않는 결함이 있는 UI/UX가 있는 경향이 있어 구별 문제를 해결하려고 할 때 상황이 더욱 혼란스러워질 수 있습니다.

답변2

당신이 원하는대로다른 위치, 자연스러운 해결책은 해당 위치를 추가하는 것입니다.

location /pass {
}

기본적으로 nginx는 웹 루트에서 'pass'라는 파일을 찾습니다. 이 기본값이 마음에 들지 않으면 이 새 위치 블록 내에 더 많은 지시어를 추가하여 이를 달성할 수 있습니다.

당신은 또한 사용할 수 있습니다

location = /pass {
}

그러면 nginx가 일치하는 항목을 좀 더 빨리 찾을 수 있습니다.

관련 정보