RadarURL

소프트웨어
2013.04.08 08:43

Nginx HttpRewriteModule

조회 수 6251 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

가 크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

가 크게 작게 위로 아래로 댓글로 가기 인쇄

Synopsis

This module makes it possible to change URI using regular expressions (PCRE), and to redirect and select configuration depending on variables.

If the directives of this module are given at the server level, then they are carried out before the location of the request is determined. If in that selected location there are further rewrite directives, then they also are carried out. If the URI changed as a result of the execution of directives inside location, then location is again determined for the new URI.

This cycle can be repeated up to 10 times, after which Nginx returns a 500 error.

[edit] Directives

[edit] break

Syntax: break
Default:
Context: server
location
if
Reference: break


Completes the current set of rules. Continue processing within the current location block but do not process any more rewrite directives.

Example:

if ($slow) {
  limit_rate  10k;
  break;
}

[edit] if

Syntax: if ( condition ) { ... }
Default:
Context: server
location
Reference: if


note: Before using if please see the if is evil page and consider using try_files instead.

Checks the truth of a condition. If the condition evaluates to true, then the code indicated in the curly braces is carried out and the request is processed in accordance with the configuration within the following block. The configuration inside the ifdirective is inherited from the previous level.

The condition can be:

  • the name of a variable; false values are: empty string ("", or any string starting with "0";
  • a comparison of a variable using the = and != operators;
  • pattern matching with regular expressions:
    • ~ performs a case-sensitive match
    • ~* performs a case-insensitive match (firefox matches FireFox)
    • !~ and !~* mean the opposite, "doesn't match"
  • checking for the existence of a file using the -f or !-f operators;
  • checking for the existence of a directory using -d or !-d;
  • checking for the existence of a file, directory or symbolic link using -e or !-e;
  • checking whether a file is executable using -x or !-x.

Parts of the regular expressions can be in parentheses, whose value can then later be accessed in the $1 to $9 variables. See Extracting matches.

Examples of use:

if ($http_user_agent ~ MSIE) {
  rewrite  ^(.*)$  /msie/$1  break;
}
 
if ($http_cookie ~* "id=([^;] +)(?:;|$)" ) {
  set  $id  $1;
}
 
if ($request_method = POST ) {
  return 405;
}
 
if ($slow) {
  limit_rate  10k;
}
 
if ($invalid_referer) {
  return   403;
}
 
if ($args ~ post=140){
  rewrite ^ http://example.com/ permanent;
}

The value of the built-in variable $invalid_referer is given by the directive valid_referers.

[edit] return

Syntax: return code [ text ]
return code URL
return URL
Default:
Context: server
location
if
Reference: return


This directive concludes execution of the rules and returns the status code indicated to client. It is possible to use any http return code, ranging in number from 0-999. Furthermore, nonstandard code 444 closes the connection without sending any headers.

[edit] rewrite

Syntax: rewrite regex replacement [ flag ]
Default:
Context: server
location
if
Reference: rewrite


This directive changes URI in accordance with the regular expression and the replacement string. Directives are carried out in order of appearance in the configuration file.

Flags make it possible to end the execution of rewrite directives.

If the replacement string begins with http:// then the client will be redirected, and any further rewrite directives are terminated.

Flags can be any of the following:

  • last - completes processing of current rewrite directives and restarts the process (including rewriting) with a search for a match on the URI from all available locations.
  • break - completes processing of current rewrite directives and non-rewrite processing continues within the current location block only.
  • redirect - returns temporary redirect with code 302; it is used if the substituting line begins with http://
  • permanent - returns permanent redirect with code 301

- Note that outside location blocks, last and break are effectively the same.

Example:

rewrite  ^(/download/.*)/media/(.*)\..*$  $1/mp3/$2.mp3  last;
rewrite  ^(/download/.*)/audio/(.*)\..*$  $1/mp3/$2.ra   last;
return   403;

But if we place these directives in location /download/, then it is necessary to replace flag "last" by "break", otherwise Nginx will hit the 10 cycle limit and return error 500:

location /download/ {
  rewrite  ^(/download/.*)/media/(.*)\..*$  $1/mp3/$2.mp3  break;
  rewrite  ^(/download/.*)/audio/(.*)\..*$  $1/mp3/$2.ra   break;
  return   403;
}

If in the line of replacement arguments are indicated, then the rest of the request arguments are appended to them. To avoid having them appended, place a question mark as the last character:

  rewrite  ^/users/(.*)$  /show?user=$1?  last;

Note: for curly braces( { and } ), as they are used both in regexes and for block control, to avoid conflicts, regexes with curly braces are to be enclosed with double quotes (or single quotes). For example, to rewrite URLs like:

/photos/123456

to:

/path/to/photos/12/1234/123456.png

use the following (note the quotes enclosing the regex):

rewrite  "/photos/([0-9]{2})([0-9]{2})([0-9]{2})" /path/to/photos/$1/$1$2/$1$2$3.png;

If you specify a ? at the end of a rewrite then Nginx will drop the original $args (arguments). When using $request_uri or $uri&$args you should specify the ? at the end of the rewrite to avoid Nginx doubling the query string.

Example using $request_uri in a rewrite from www.example.com to example.com

server {
   server_name www.example.com;
   rewrite ^ http://example.com$request_uri? permanent;
}

Also rewrite operates only on path, not parameters. To rewrite a URL with parameters to another URL, use this instead:

if ($args ~ post=100){
  rewrite ^ http://example.com/new-address.html? permanent;
}

Note that the $args variable is not decoded, unlike URIs during location matching.

Also note that named subexpressions (?<name>) should be used when accessing variables from a map using regular expressions (patterns begininng with ~) because the map runs on demand and will override $1 (even when named subexpressions are used in the map).

[edit] rewrite_log

syntax: rewrite_log on | off

default: rewrite_log off

context: http, server, if-in-server, location, if-in-location

variables: no


When enabled, outputs information about rewrites to the error log at notice level.

[edit] set

Syntax: set variable value
Default:
Context: server
location
if
Reference: set


Directive establishes value for the variable indicated. As the value it is possible to use a text, variables and their combination.

You can use set to define a new variable. Note that you can't set the value of a $http_xxx header variable.

[edit] uninitialized_variable_warn

Syntax: uninitialized_variable_warn on | off
Default: on
Context: http
server
location
if
Reference: uninitialized_variable_warn


Enables or disables logging of warnings about noninitialized variables.

[edit] Internal implementation

Internally, the rewrite directives are compiled at the time the configuration file is loaded into internal codes, usable during the request by the interpreter.

This interpreter is a simple stack virtual machine. For example, the directive:

location /download/ {
  if ($forbidden) {
    return   403;
  }
  if ($slow) {
    limit_rate  10k;
  }
  rewrite  ^/(download/.*)/media/(.*)\..*$  /$1/mp3/$2.mp3  break;
}

will be compiled into this sequence:

  variable $forbidden
  checking to zero
  recovery 403
  completion of entire code
  variable $slow
  checking to zero
  checkings of regular expression
  copying "/"
  copying $1
  copying "/mp3/"
  copying $2
  copying ".mp3"
  completion of regular expression
  completion of entire sequence

Note that there is no code for directive limit_rate, since it does not refer to module ngx_http_rewrite_module. The "if" block exists in the same part of the configuration as the "location" directive.

If $slow is true, then what's inside the "if" block is evaluated, and in this configuration limit_rate it is equal to 10k.

Directive:

  rewrite  ^/(download/.*)/media/(.*)\..*$  /$1/mp3/$2.mp3  break;

It is possible to reduce the sequence, if in the regular expression we include the first slash inside the parentheses:

  rewrite  ^(/download/.*)/media/(.*)\..*$  $1/mp3/$2.mp3  break;

then the sequence will appear like this:

  checking regular expression
  copying $1
  copying "/mp3/"
  copying $2
  copying ".mp3"
  completion of regular expression
  completion of entire code

[edit] References

Original Documentation

PCRE Man Page in Plain Text


RegexOne» Learn regular expressions with simple, interactive examples.

RegexPal — a JavaScript regular expression tester

 

출처 : http://wiki.nginx.org/HttpRewriteModule

?

공부 게시판

공부에 도움되는 글을 올려주세요.

  1. [공지] 공부 게시판 입니다.

    Date2003.08.18 By처누 Views2016905
    read more
  2. 유심&통장 [카,톡] sim256 (24시문의) 대포유심 대포통장판매 선불유심팝니다 대포유심팝니다

    Date2026.10.06 Category윈도우즈 By놀라운운석99 Views1
    Read More
  3. 대전누수, 근본 원인 해결의 시작

    Date2026.10.06 Category사무 소프트웨어 By적막한체이서42 Views1
    Read More
  4. 강남건전지❤️OlO-8655-OO53❤️친절문의환영 #강남건전지 #강남유니콘 #선릉유니콘 #강남건전지위치 #선릉역건전지#대치동유니콘 #강남바커스 #선릉바커스 #선릉역바커스 #강남룸클럽 #선릉룸클럽 #강남베터리 #강남바데리

    Date2026.10.05 Category데이터베이스 By괴랄한재규어89 Views1
    Read More
  5. 용인두피문신 고민? 만족 후기 보려면

    Date2026.10.05 Category사무 소프트웨어 By날카로운꿩11 Views12
    Read More
  6. 웨딩누브라, 완벽한 드레스 핏을 위한 선택

    Date2026.10.05 Category윈도우즈 By날카로운감시자22 Views5
    Read More
  7. 인천맛집 순위

    Date2026.10.05 Category가상화 By차가운파편97 Views2
    Read More
  8. 손목터널증후군 치료, 현명한 선택 기준은?

    Date2026.10.05 Category웹서버,WAS By괴상한두루미52 Views1
    Read More
  9. 최근 테헤란로 벤처 밸리의 핵심 리더들 사이에서 ‘클래스가 다른 정통 수질과 프라이빗 무드’로 소문 자자한 '선릉 룸싸롱' 기습 방문, 인공미를 거부하는 무결점 뉴페이스들과 심장을 마비시킨 사심 플러팅에 제대로 저격당하고 온 솔직 후기

    Date2026.10.05 Category가상화 By희미한홍학99 Views4
    Read More
  10. 카­톡 gusim8003 급전/내구제 (24시문의) 선불폰 소액결제 일수 급전대출

    Date2026.10.05 Category웹서버,WAS By황금빛섬광82 Views2
    Read More
  11. 흥신소 선택 가이드

    Date2026.10.05 Category데이터베이스 By흔들리는골렘32 Views2
    Read More
  12. 양산싱크대막힘 완벽 해결 뚫자하수구

    Date2026.10.05 Category윈도우즈 By몽환적인태양핵44 Views1
    Read More
  13. 양산싱크대막힘 신속 해결의 모든 것

    Date2026.10.05 Category가상화 By조용한치타58 Views4
    Read More
  14. 카카오*톡 gusim8003 내구제대출/상조내구제 [24시문의] 선불유심 대출 폰내구제 가개통

    Date2026.10.05 Category유닉스/리눅스 By하얀라마72 Views9
    Read More
  15. 종로구가라오케 010 2817 0845 종로구 가라오케 예약 및 문의

    Date2026.10.04 Category윈도우즈 By흐릿한분석가84 Views10
    Read More
  16. 성공적인 중고화물차 선택 가이드

    Date2026.10.04 Category가상화 By붉은불꽃77 Views7
    Read More
  17. 센텀르엘, 하이엔드 라이프의 새로운 기준

    Date2026.10.04 Category데이터베이스 By검은파편81 Views7
    Read More
  18. 양산싱크대막힘 완벽 해결 뚫자하수구

    Date2026.10.04 Category가상화 By매혹적인곰18 Views7
    Read More
  19. 동탄 미시보다 자극적 첫사랑보다 그리운 마블 노래클럽 010++8293++0291

    Date2026.10.03 Category사무 소프트웨어 By광휘의퀘이사47 Views7
    Read More
  20. 탄현동노래방 탄현동에서 찾는 노래방 010 2817 0845

    Date2026.10.03 Category웹서버,WAS By울리는고래상어65 Views16
    Read More
  21. [Rocky Linux 9] /home 용량 줄이고 /root 용량 늘리기

    Date2026.04.03 Category유닉스/리눅스 ByYooN Views3812
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 36 Next
/ 36


즐겨찾기 (가족)

JAESOO's HOMEPAGE


장여은 홈페이지


장여희 홈페이지


장여원 홈페이지


즐겨찾기 (업무)

알리카페 홀릭

숭실대 컴퓨터 통신연구실 (서창진)

말레이시아 KL Sentral 한국인 GuestHouse


즐겨찾기 (취미)

어드민아이디

유에코 사랑회

아스가르드 좋은사람/나쁜사람

JServer.kr

제이서버 메타블로그

재수 티스토리


즐겨찾기 (강의, 커뮤니티)

재수 강의 홈페이지


한소리


VTMODE.COM


숭실대 인공지능학과


숭실대 통신연구실


베너