[Nginx] Redirect & Rewrite
- Nginx
- 2020. 8. 27.
이전글에 이어서 Nginx의 configuartion에 대해 알아보도록 하겠습니다.
5. Redirect
우리가 이전글에서 사용했던 location 은 return 을 사용해 특정 uri의 request에 대한 결과값을 전달했습니다.
# return
location /hello {
return 200 "Hello World";
}
위와 같은 return statement는 state code + response data 로 이루어져 있으며, 아래와 같이 정적인 string 값을 return 하는 경우의 state code는 200입니다.
return
만약 정적인 값이 아닌 또다른 uri를 return 하는 경우에 state code는 307이며 이를 redirect 라고 합니다.
redirect
예를들어 기존에 /thumb.png 로 접근했던 이미지를 /logo로 접근하고자 할때 redirect를 사용할 수 있습니다.
# redirect
location /logo {
return 307 /thumb.png;
}
위의 location은 /logo의 접근을 /thumb.png로 redirect 합니다. 만약 브라우저에서 /logo로 접근하면 아래와 동일한 이미지가 출력되는 것을 확인할 수 있습니다.
이때 uri를 확인해보면 /logo를 호출했음에도 location의 redirect로 인해 /thumb.png로 uri가 변경된 것을 확인할 수 있습니다.
6. Rewrite
rewrite는 redirect와는 다르게 내부적으로 요청을 처리하고 uri는 기존에 호출했던 uri를 유지합니다.
# rewrite
rewrite ^/logo?$ /thumb.png last;
예를 들어 위와 같이 작성하면 /logo 에 대한 request를 /thumb.png로 rewrite 합니다. 이후 브라우저에 확인해보면 동일한 이미지가 출력되는 것을 확인할 수 있습니다.
이전과 다른점은 uri가 /thumb.png로 변경되지 않고 기존의 /logo를 유지하고 있다는 점입니다. 설명드렸듯이 rewrite는 내부에서 redirect를 처리하고 외부에 노출하지 않습니다.
위와 같은 점이 redirect와 rewrite와 차이점입니다. 😎
rewrite은 아래와 같이 정적인 값을 return 할때도 사용할 수 있습니다.
# rewrite
rewrite ^/user/\w+ /greet;
lcoation /greet {
return 200 "Hello User"
}
위의 rewrite는 /user + /[word] 형태의 모든 request를 /greet로 redirect 합니다.
rewrite를 사용하면 uri의 특정 값을 grap해 사용할 수도 있습니다. 아래와 같이 입력하면 ( ) 내부의 uri를 $로 grap 할 수 있습니다.
rewrite ^/user/(\w+) /greet/$1;
location /greet {
return 200 "Hello User";
}
location = /greet/minho {
return 200 "Hello Minho";
}
만약 /greet/subaek를 호출하면 $1에서 grap한 값이 subaek 이므로 prefix match로 선언한 /greet location으로 rewrite 합니다.
/greet/minho를 호출하면 $1에서 grap한 값이 minho 이므로 exact match로 선언한 /greet/minho location으로 rewrite 합니다.
'Nginx' 카테고리의 다른 글
[Nginx] Logging (0) | 2020.08.27 |
---|---|
[Nginx] Try Files & Named Location (0) | 2020.08.27 |
[Nginx] Location Block & Variables (1) | 2020.08.27 |
[Nginx] Configuration (1) | 2020.08.27 |
[Nginx] Overview & Install (0) | 2020.08.27 |