Nginx가 루트 도메인 뒤에 URL 값을 허용하는 이유는 무엇입니까?

Nginx가 루트 도메인 뒤에 URL 값을 허용하는 이유는 무엇입니까?

처음 Nginx를 설정하는 경우 내 목표는 example.com에 최소한의 구성으로 제공되는 정적 'index.html' 페이지를 갖는 것입니다. www 하위 도메인도 삭제하고 싶습니다. 내 사이트에서 사용 가능한 서버 블록은 다음과 같습니다.

server {
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

server {
    server_name example.com;
    root /var/www/example.com/;
    index index.html index.htm;

    location / {
            try_files $uri $uri/ /index.html;
    }
}

www.example.com 또는 example.com을 사용하면 www가 자동으로 삭제되어 제대로 작동합니다.

내 문제는 example.com 다음에 무엇이든 입력할 수 있고 index.html 페이지가 계속 로드된다는 것입니다(예: example.com/ABC 또는 example.com/12345).이 페이지는 존재하지 않습니다. URL이 허용되는 이유는 무엇입니까? 도메인 루트가 아닌 다른 URL은 대신 404 페이지를 반환할 것으로 예상됩니다.

이것은 아마도 매우 간단한 문제일 것입니다. 그러나 여기와 문서에서 검색을 시도했지만 지금까지 아무 것도 나오지 않았습니다.

답변1

try_files 절의 올바른 동작인 것 같습니다. nginx 위키에서:

파일이 순서대로 존재하는지 확인하고, 발견된 첫 번째 파일을 반환합니다. 후행 슬래시는 $uri / 디렉토리를 나타냅니다. 파일을 찾을 수 없는 경우 마지막 매개변수로의 내부 리디렉션이 호출됩니다. 마지막 매개변수만 내부 리디렉션을 유발하고 이전 매개변수는 내부 URI 포인터만 설정한다는 점에 유의하세요.

따라서 찾을 수 없는 ABC 또는 12345를 찾으면 index.html에 대한 내부 리디렉션이 호출됩니다.

다음을 사용해 보세요:

location / {
    try_files $uri $uri/ =404;
}

전체 참조를 보려면 여기를 보십시오.

http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files

마틴 피요르드발트(Martin Fjordvald)의 작품을 기반으로 합니다.논평테스트를 거쳐 작동 중인 두 서버 블록의 최소 구성은 다음과 같습니다.

server {
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

server {
    server_name example.com;
    root /var/www/example.com/;
    index index.html index.htm;
}

답변2

내가 생각할 수 있는 2가지:

index.html로 다시 작성하는 방법이 있거나

또는 index.html에 다시 연결되는 사용자 정의 404 페이지가 있을 수도 있습니다.

적어도 그것은 내가 먼저 확인하고 싶은 2가지 아이디어가 될 것입니다.

다른 가능한 해결책은 로그를 확인하고, 디버그할 값을 설정하고, index.html로 다시 "리디렉션"하는 것이 무엇인지 확인하는 것입니다. 슬프게도 저는 더 많은 도움을 줄만큼 좋은 nginx를 모릅니다.

관련 정보