[Nginx] Try Files & Named Location

반응형

이전글에 이어서 Nginx의 configuartion에 대해 알아보도록 하겠습니다.

7. Try Files

try files은 server & location context에서 사용합니다.

image.png

try files은 rewrite와 비슷하게 모든 request에 대해 일치하는 path를 앞에서 부터 순서대로 비교한뒤 root에 존재하는 path를 rewrite 하는 명령어입니다.

server {

    listen 80;
    server_name 54.180.79.141;

    root /sites/demo;

    try_files /thumb.png /greet;

    location /greet {
        return 200 "Hello User";
    }
}

예를 들어 위와 같이 try_files를 작성하면 호출되는 모든 request에 순서대로 앞에서부터 path를 확인후 만약 해당 path가 root에 존재한다면 해당 path로 rewrite 합니다.

반대로 root 경로에 해당 path가 존재하지 않을 경우엔 해당 path는 건너뜁니다.

example

• /sites/demo/thumb.png가 있는지 확인 -> 있으면 /thumb.png return
• /sites/demo/thumb.png가 없으면 -> /sites/demo/greet 있는지 확인 -> 있으면 /sites/demo/greet return

/thumb.png는 저의 root 경로인 /sites/demo에 존재하므로 모든 request에 대해 아래와 같이 /thumb.png를 return 합니다.

/minho

image.png

/everything

image.png

만약 아래와 같이 nginx.conf를 변경하면 /cat.png는 root에 존재하지 않으므로 /greet를 rewrite 합니다.

server {

    listen 80;
    server_name 54.180.79.141;

    root /sites/demo;

    try_files /cat.png /greet;

    location /greet {
        return 200 "Hello User";
    }
}

/minho

image.png

/everything

image.png

앞의 모든 path가 존재하지 않을 경우 항상 마지막 path는 root에 존재하지 않더라도 rewrite 됩니다.

예를 들어 아래와 같이 작성한경우 앞의 2개 path가 존재하지 않는 경우 /404 path가 root에 존재하지 않더라도 항상 /404 path로 rewrite 됩니다.

server {

    listen 80;
    server_name 54.180.79.141;

    root /sites/demo;

    try_files /cat.png /greet /404;

    location /404 {
        return 404 "Sorry, that file could not be found";
    }

    location /greet {
        return 200 "Hello User";
    }
}

위의 conf에서 /greet와 /404 둘다 root에 존재하지 않음에도 /404로 rewrite 되는 것을 확인할 수 있습니다.

image.png

위와 같은 특성과 $uri를 사용해서 에러페이지를 작성하는 것도 하나의 방법이 될 수 있을 것 같습니다.. 😎

8. Named Location

named location을 사용하면 아래와 같이 변경해 사용할 수 있습니다.

server {

    listen 80;
    server_name 54.180.79.141;

    root /sites/demo;

    try_files /cat.png /greet @404;

    location @404 {
        return 404 "Sorry, that file could not be found";
    }

    location /greet {
        return 200 "Hello User";
    }
}

참고 자료 : https://www.udemy.com/course/nginx-fundamentals/


반응형

'Nginx' 카테고리의 다른 글

[Nginx] Worker Process  (0) 2020.08.27
[Nginx] Logging  (0) 2020.08.27
[Nginx] Redirect & Rewrite  (0) 2020.08.27
[Nginx] Location Block & Variables  (1) 2020.08.27
[Nginx] Configuration  (1) 2020.08.27

댓글

Designed by JB FACTORY