우노
[Nginx] 정규표현식 본문
들어가기 앞서,
- 해당 포스트에선, Nginx의 Location match 종류와 정규표현식에 대해서 다뤄보겠습니다.
Location Match 종류
prefix match
location /greet { return 200 'this is prefix match'; }
- 위 예제에선, /greet으로 시작하는 모든 uri에 대해서 동작합니다.
- 54.180.79.141/greet
- 54.180.79.141/greeta
- 위 예제에선, /greet으로 시작하는 모든 uri에 대해서 동작합니다.
exact match
location = /greet { return 200 'this is exact match'; }
- 위 예제에선, /greet과 정확히 일치하는 uri에 대해서만 동작합니다.
regex match
location ~ /greet[0-9] { return 200 'this is regex match'; }
- 위 예제에선, 정규표현식에 매칭되는(/greet0 ~ /greet9) 까지의 uri에 대해서만 동작합니다.
- 대소문자를 구분하지 않을 경우엔 ~ 대신 ~* 을 사용하면 됩니다.
preferential prefix
location ^~ /greet { return 200 'this is regex match'; }
- prefix와 동일하지만, regex, prefix보다 높은 우선순위를 갖습니다.
전체적인 match 우선순위는 다음과 같습니다.
exact > preferential > regex > prefix
정규표현식
- ^
- 설명
- 정규표현식을 시작한다는 의미입니다.
- ^ 뒤의 문자들을 패턴으로 사용합니다.
- 예시 : ^a
- 패턴과 일치 : apple, as
- 패턴과 불일치 : bbq, string
- 설명
- $
- 설명
- 정규표현식을 끝낸다는 의미입니다.
- $ 앞의 문자들을 패턴으로 사용합니다.
- 예시 : a$
- 패턴과 일치 : camera, asia
- 패턴과 불일치 : hell, heaven
- 설명
- .
- 설명 : . 앞의 모든 문자들이 일치해야한다 것을 의미합니다.
- 예시 : nginx.
- 패턴과 일치 : nginx, nginxw
- 패턴과 불일치 : ngin, ngix
- [ ]
- 설명
[ ]
내 문자 중 하나와 일치해야한다는 것을 의미합니다.- [a-d]는 문자 범위, [abcd]는 문자 집합, [a-y0-9]는 두범위
- 예시 : nginx[a-c123-]
- 패턴과 일치 : nginxa, nginx1, nginx2
- 패턴과 불일치 : nginxz, nginx5, nginxo
- 설명
- [^ ]
- 설명 :
[ ]
내 문자에 포함되지 않는 문자를 패턴으로 사용합니다. - 예시 : nginx[^a-np-z0-9]
- 패턴과 일치 : nginx
- 패턴과 불일치 : nginxa, nginxp, nginx0
- 설명 :
- |
- 설명 : 여러 종류의 문자들을 패턴으로 사용할 때 사용합니다.
- 예시 : ^/(api|login|auth)/(.*)$
- ( )
- 설명 : 여러 종류의 패턴들을 한 단위로 묶을 때 사용합니다.
- 예시 : ^/(api|login|auth)/(.*)$
- \
- 설명 : 패턴이 아닌 실제 문자를 작성할 때 사용합니다.
- 예시 :
~^www\.example\.com$
수량 표식
*
- 설명 : * 앞에 패턴 요소가 없거나 1회 이상 있어야 합니다.
- 예시 : ng*inx
- +
- 설명 : + 앞에 패턴 요소가 1회 이상 있어야 합니다.
- 예시 : ng+inx
- ?
- 설명 : ? 앞에 오는 패턴 요소가 없거나 한 번 있어야 합니다.
- 예시 : ng?inx
- { x }
- 설명 : {x} 앞에 오는 패턴 요소가 x회 있어야 합니다.
- 예시 : ng{3}inx
- { x, }
- 설명 : {x, } 앞에 오는 패턴 요소가 x회 이상 있어야 합니다.
- 예시 : ng{3,}inx
- { x,y }
- 설명 : {x,y} 앞에 오는 패턴 요소가 x회 이상, y회 이상 있어야 합니다.
- 예시 : ng{2,4}inx
rewrite 예제
domain.com/blog/~~~
를domain.com/
로 수정location /blog/ { rewrite ^/blog(.*)$ /; }
- 대신, nginx가 수정된 URI로 일치하는 location을 새롭게 찾습니다.
domain.com/docs/readme.html
을domain.com/files/docs/readme.html
로 수정location /docs/ { rewrite ^/docs/(.*)$ /files/docs/$1; }
- 대신, nginx가 수정된 URI로 일치하는 location을 새롭게 찾습니다.
domain.com/~~~
를domain.com/
로 수정location ~ ^(.*)$ { rewrite ^(.*)$ / break; proxy_pass http://domain.com; }
- rewrite 끝에 break flag를 추가함으로써,
- nginx가 수정된 URI로 일치하는 location을 새롭게 찾지 않도록 합니다.
- 해당 URI는 domain.com에 그대로 전달됩니다.
Nginx location 매칭 테스트 사이트
참고
- https://server-talk.tistory.com/309
- https://velog.io/@dkwktm45/nginx-reverse-proxy2내부-서버에-요청하는-경로는-변경하기
- https://velog.io/@tlatjdgh3778/Nginx-proxypass-및-rewrite-설정
- https://yunzema.tistory.com/289
- https://lhb.kr/news/article.html?no=3101
- https://opentutorials.org/module/384/4337
- https://minholee93.tistory.com/entry/Nginx-Redirect-Rewrite
- https://devzeroty.tistory.com/entry/NGINX-rewirte-redirect-주소변환-설정
- https://minholee93.tistory.com/entry/Nginx-Location-Block-Variables
- https://blog.naver.com/special9486/220694733669
'Web_App > Nginx' 카테고리의 다른 글
[Nginx] proxy_pass 시 cookie 전달 (0) | 2023.03.30 |
---|---|
[Nginx] proxy_pass 시 custom header 추가 (0) | 2023.03.28 |
[Nginx] 변수 사용 방법 (0) | 2023.03.27 |
[Nginx] Json 로그 포맷 설정 (0) | 2023.03.11 |
[Nginx] resolver란? (0) | 2023.02.23 |
Comments