본문 바로가기

Development/Nginx

#4 재작성에 관한 모든 것(1)

1. 리다이렉트 설정

 - 사이트가 변경되면서 초기 Contents들의 url이 변경하게 되면 기존 사용자들이 저장하고 있거나 검색엔진에 최적화가 사라지게 되어 사용자들에게 불편을 끼치게 된다. 간단한 설정을 기존 구축된 사이트를 신규로 생성한 사이트로 모든 리다이렉트가 확실하게 수행되도록 할수 있다.


server {
    server_name www.ggang9.com;
    ...
    rewrite ^/blog/test_post.html$ /blog/test-post/ permanent;
    ...
    location ~ .php$ {
    }
}


- 위설정에서는 permanent 설정으로 영구 리다이렉트 규칙[301]을 설정하였다. 해당 키워드를 사용하지 않으면 [302]로 임시 리다이렉트로 사용된다. 301의 경우에는 검색 클롤러도 새로 변경된 url로 변경을 하지만 302는 임시처리로 간주하여 변경하지 않게 된다.


2. 재작성과 변수

 - URI상에 특정 Get 매개변수가 포함되어 있는 체크를 할수도 있다.


location / {
    ...
    if ($arg_special ~* (beta|alpha|gamma) ) {
        rewrite ^(.*)$ http//www.ggang9.com/greek/$1/;
    }
}


 - 위의 예제에서는 special이라는 Get 매개변수가 포함된 url이라면 beta에 해당하는 특정 url 로 리다이렉트 시켜 준다.

 -HTTP 헤더에서 사용간으한 여러가지 환경 변수


 변수

 설명 

 $arg_PARAMETER 

 이 변수는 질의 문자열에 GET 요청 변수인 PARAMETER값이 있을 경우 그 값을 포함한다. 

 $args 

 이 변수는 URL의 질의 문자열 전체를 포함한다. 

 $binary_remote_addr 

 바이너리 형식이 클라이언트 주소 

 $body_bytes_sent

 전송된 바디의 바이트 수 

 $content_length 

 이 변수는 요청 헤더의 Content-length와 같다. 

 $content_type 

 이 변수는 요청 헤더의 Content-Type과 같다. 

 $document_root 

 이 변수는 현재 요청의 root 지시어의 값과 같다. 

 $document_uri

 $uri와 같다. 

 $host

 요청 헤더의 'Host' 값과 같다.

 $http_HEADER 

 HTTP헤더의 값을 소문자로 대시(-) 기호를 밑줄('_') ex) $http_user_agent, $http_referer 

 $is_args 

 $args가 설정되어 있으면 "?", 없어면 "" 

 $request_uri 

 이 변수는 클라이언트로 부터 수신한 인자를 포함한 원본 요청의 URI와 같다.

 $scheme 

 HTTP구조(http,https)를 의미한다. 해당 값을 리턴한다. 

 $server_addr 

 서버 주소 

 $server_name 

 서버명 

 $server_port 

 요청을 수신하는 서버의 포트 

 $server_protocol 

 요청 프로토콜 

 $uri 

 현재 요청의 URI와 같다.$request_uri와는 다를수 있다. 인자는 제외된다.


3. 재작성과 쿠키

 - 브라우저의 쿠키의 정보를 이용하여 여러가지 규칙을 정의할 수 있다.


if ( $cookie_env ~* "dev" ) {
    rewrite ^(.*)$ /dev/$1;
}
if ( $cookie_env ~* "stage" ) {
    rewrite ^(.*)$ /stage/$1;
}
if ( $cookie_env ~* "prd" ) {
    rewrite ^(.*)$ /prd/$1;
}


4. 재작성과 브라우저 에이전트

- 브라우저 사용자 에이전트에 따라 각각 다른 사이트를 서비스 하도록 재작성 할수 있다.

- 이 부분은 상당히 자주 사용할수 있을 것 같다.


location / {
    ...
    if ($http_user_agent ~* '(iPhone|iPod)') {
        set $iphone_request '1';
    }
    if ($iphone_request = '1' ) {
        rewrite ^.+ http://m.example1.com/$uri;
    }
}


5. 재작성과 전송률 제한

 - 비율 제한 요청과 관련된 기능을 내장하고 있다.

 - 세션저장을 위한 저장역역으로 사용되는 Zone을 정의할 수 있다.


location / {
    ...
    if ($http_user_agent ~ "MSIE" ) {
        limit_rate 5k;
    }
}


http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    ...
    server {
        ...
        location / {
            limit_req zone =one burst=5;
        }
    }
}

 - 환경설정은 one이라는 존을 정의하고 이존에는 10MB의 세션 저장소를 할당한다. 초당 한개의 Request가 허용되며 한계치를 넘어서게 되면 Service unabailable 페이지를 표시한다. 1MB 존에는 약 16,000세션을 저장가능하다.


6. HTTP 리퍼러와 요청 제한

 - referer 요청의 헤더를 체크하여 스팸을 막아주는 규칙을 작성할 수 있다.


location / {
    if ($http_referer ~* (babes|click|diamone ~ ~ )) {
        return 403;
    }
}


 - 위의 예제에서는 referer값을 키워드들로 비교하여 불량 사이트로의 링크를 차단하게 된다.




엔진엑스로 운용하는 효율적인 웹사이트

저자
디판카 사카 지음
출판사
에이콘출판 | 2013-03-22 출간
카테고리
컴퓨터/IT
책소개
아파치를 대체하고 있는 강력한 웹서버 엔진엑스(Nginx)의 실...
가격비교

'Development > Nginx' 카테고리의 다른 글

#5 재작성에 관한 모든 것(2)  (0) 2014.02.03
#3 Nginx의 기타 코어 HTTP 모듈  (0) 2014.01.22
#2 환경 설정하기  (0) 2014.01.15
#1 Nginx 설치하기  (0) 2014.01.06