WEB Server - NGINX 정규표현식 알아보기 - CentOS 7




    이번 포스팅에서는 NGINX에서 사용하게 될 정규 표현식에 대해서 알아보도록 하겠습니다.




    이전 글 :


    서버와 클라이언트 그리고 HTTP - https://server-talk.tistory.com/291


    WEB Server - NGINX 알아보기 - https://server-talk.tistory.com/297


    WEB Server - NGINX Comfile 설치하기 - https://server-talk.tistory.com/301


    WEB Server - NGINX 서비스 제어 - https://server-talk.tistory.com/302


    WEB Server - NGINX 구성파일 및 기본설정 - CentOS 7 - https://server-talk.tistory.com/303


    WEB Server - NGINX HTTP 설정 - CentOS 7 - https://server-talk.tistory.com/304


    WEB Server - NGINX PHP 5.2 연동하기 - CentOS 7 - https://server-talk.tistory.com/307


    WEB Server - NGINX LOCATION 블록 알아보기 - CentOS 7https://server-talk.tistory.com/310


    WEB Server - NGINX LOCATION 블록 사용법 - CentOS 7- https://server-talk.tistory.com/311









     URL Rewrite(재작성) 은 무엇인가?








    Rewrite(재작성)는 뜻 그대로 사용자가 요청한 URL의 정보를 제공하기 전에 URL 정보를 수정하여 전송하는것 입니다 또한 지시어 개수에 비해 다양하고 많은 기능을 제공하며, location 블록에 정규식을 입력하여 사용자에게 전달하는 URL 정보를 쉽게 수정할 수 있습니다


    보안적으로는 확장자 치환을 통해 서버의 언어가 어떠한 언어로 구성되어 있는지 알려지지 않게 구성도 가능하며, 다른 도메인으로 변경이 가능합니다.







     URL Rewrite(재작성) 활용 분야



    NGINX에 Rewrite는 강력하고 정교하게 URL을 조작하여 다양하게 활용이 가능합니다.



    1. 짧은 주소로 변경



    LOCATION을 이용하여 짧은 주소로 변경하여 URL에 담고 있는 정보를 의미론적으로 지정하여 효율적으로 검색엔진에 노출되도록 사용할 수 있습니다.




    2. 확장자 치환



    서버의 언어가 PHP를 가정하였을때 PHP 파일이 실행하게 됩니다 이러한 경우 확장자를 치환하여 사용자로부터 서버의 정보를 숨겨 보안을 높일 수 있습니다.




    3. 리다이렉션



    웹 브라우저를 통해 사용자가 tistory.com으로 접속하였을때, server-talk.com 으로 리다이렉션을 설정할 수 있습니다.






     NGINX와 PCRE(Perl Compatible Regular Expression)



    NGINX Rewrite 모듈은 PCRE(Perl Compatible Regular Expression) 구문에 따르는 정규표현식을 사용합니다 


    정규식의 형태는 단순한 형태의 문자 하나로 구성된 패턴입니다 






     NGINX 지시어



    지시어 : rewrite


    문법 : rewrite [정규식] [URL];

    예시 : rewrite &(.*) https://server-talk.com$1 [URL];

    Perl 정규 표현식으로 요청받은 URL를 조작하고 경로를 재지정 하는데 사용됩니다





    지시어 : break


    문법 : break;

    rewrite 지시어를 사용하지 않을때 사용되는 지시어 입니다






    지시어 : return


    문자나 URL를 지정하여 HTTP 상태 코드에 따라 요청한 처리를 중단하는데 사용됩니다

    문법 : return [코드] | [문자];

    예시 : return 403 "Hello World";

    HTTP 상태 코드에 따라 사용자에게 반환될 URL 및 문자열을 직접 지정할 수 있습니다.


    HTTP 상태 코드


    204 No content : 정상적인 요청이지만 컨텐츠를 제공하지 안할때 사용되는 코드 입니다


    400 Bad Request : 잘못된 요청을 일때 사용되는 코드 입니다


    402 Payment Required : 결제 시스템에 사용되는 코드이며, 지금은 사용하지 않고 있습니다


    403 Forbidden : 서버가 요청을 거부 및 권한이 없는 경우 발생하는 코드 입니다


    404 Page Not Found : 파일이 존재하지 않을때 사용되는 코드 입니다


    405 Method Not Allowed : POST, GET, PUT, DELTE 과 같이 허용되지 않는 메서드를 사용한 경우 발생하는 코드 입니다


    406 Not Acceptable : 정상적인 요청이지만 보안적으로 서버에서 받아들일 수 없는 경우 발생하는 코드 입니다


    408 Request Timeout : 서버의 요청 대기시간이 초과하여 발생하는 코드 입니다


    413 Payload Too Large : 첨부파일이 큰경우 발생하는 코드입니다 (NGINX에서는 client_max_body_size 를 지정하여 허용된 첨부파일에 크기를 지정할 수 있습니다.)


    416 Requested Range Not Statisfiable : 요청된 파일을 서버에서 지원하지 않을때 발생하는 코드 입니다


    500 Internal Server Error : 서버에 오류가 있을 경우 발생하는 코드 입니다


    501 Not Implemented : 사용자가 요청한 기능이 서버에서 지원하지 않을 경우 발생하는 코드 입니다


    502 Bad Gateway : 트래픽이 폭주하거나, 사용자에 인터넷이 이상이 있을 경우 발생하는 코드 입니다


    503 Service Temporarily Unavailable : 접속자, 트래픽 폭주로 인한 서버 과부하로 발생하는 코드 입니다


    504 Gateway Timeout : 서버가 게이트웨이, 프록시 서버 등 지정된 시간 제한이 초과하여 발생하는 코드 입니다





    지시어 : set


    변수를 초기화하는데 사용됩니다

    사용법 : set $변수이름 값;

    예시 : set var1 "server";





    지시어 : rewrite_log


    사용법 : rewrite_log [on] | [off]

    문법 : rewrite_log on

    rewrite 모듈에 대한 상세한 로그 Notes 수준으로 로그 메세지로 볼 수 있습니다.







     NGINX 정규 표현식




    메타문자 : ^ (시작) 


    예시 : ^a

    패턴과 일치 : apple, as

    패턴과 불일치 : bbq, string

    설명 : 메타문자 뒤에 문자를 패턴으로 사용 됩니다.





    메타문자 : $ (끝) 


    예시 : a$

    패턴과 일치 : camera, asia

    패턴과 불일치 : hell, heaven

    설명 : 메타문자 앞에 문자로 끝나는 패턴으로 사용 됩니다.





    메타문자 : . (모든문자) 


    예시 : nginx.

    패턴과 일치 : nginx, nginxw

    패턴과 불일치 : ngin, ngix

    설명 : 메타문자 앞에 모든 문자 일치하는 패턴으로 사용 됩니다.





    메타문자 : [ ] (집합) 


    예시 : nginx[a-c123-]

    패턴과 일치 : nginxa, nginx1, nginx2

    패턴과 불일치 : nginxz, nginx5 nginxo

    설명 : 메타문자 내 문자 중 하나와 일치해야 됩니다.

    구문 [a-y]는 범위, [abcd]는 문자 집합이고, [a-y0-9]는 두범위, 문자 집합에 - 문자를 포함하려 한다면 [바로 다음이나] 바로 전에 넣어야 합니다.





    메타문자 : [^ ] (부정 집합) 


    예시 : nginx[^a-np-z0-9]

    패턴과 일치 : nginx

    패턴과 불일치 :

    설명 : 지정한 메타문자에 포함되지 않는 문자를 패턴으로 사용 됩니다.





    메타문자 : | (또는) 


    예시 : nginx|web

    설명 : 메타문자 앞과 뒤에 패턴으로 사용 됩니다.





    메타문자 : ( ) (그룹)


    예시 : ^(ngi|nx) there$

    설명 : 여러 패턴 요소를 한 단위로 묶으며, 종종 | 메타문자로 연결된 형태로 사용됩니다.





    메타문자 :  (이스케이프) 


    예시 : ^(ngi|nx) there

    설명 : 여러 패턴 요소를 한 단위로 묶으며, 종종 | 메타문자로 연결된 형태로 사용됩니다.







     NGINX 수량 표식




    수량 표식 : * (없거나 1회 이상) 


    예시 : ng*inx

    설명 : 수량 표식 앞에 요소가 없거나 1회 이상 있어야 합니다.





    수량 표식 : + (1회 이상) 


    예시 : ng+inx

    설명 : 수량 표식 앞에 요소가 1회 이상 있어야 합니다.





    수량 표식 : ? (없거나 1회) 


    예시 : ng?inx

    설명 : 수량 표식 앞에 오는 패턴 요소가 없거나 한 번 있어야 합니다.





    수량 표식 : { x } (x회) 


    예시 : ng{3}inx

    설명 : {x} 앞에 오는 패턴 요소가 x회 있어야 합니다.





    수량 표식 : { x, } (최소 x회) 


    예시 : ng{3,}inx

    설명 : {x, } 앞에 오는 패턴 요소가 x회 이상 있어야 합니다.





    수량 표식 : { x,y } (x회에서 y회까지) 


    예시 : ng{2,4}inx

    설명 : {x,y} 앞에 오는 패턴 요소가 x회 이상, y회 이상 있어야 합니다.


    Posted by Server-talk 서버이야기