오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-10 00:03
관리 메뉴

우노

[Nginx] 정규표현식 본문

Web/Nginx

[Nginx] 정규표현식

운호(Noah) 2023. 2. 17. 18:19

들어가기 앞서,

  • 해당 포스트에선, 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
  • 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.htmldomain.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 매칭 테스트 사이트

참고

'Web > 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