WEB Server - NGINX 정규표현식 알아보기 - CentOS 7
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 7- https://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회 이상 있어야 합니다.