nginx 재 작성 rewrite 기초 및 인 스 턴 스 공유

14277 단어
nginx rewrite 정규 표현 식 일치
대소 문자 일치
대소 문 자 를 구분 하기 위해 일치 합 니 다 ~ * 대소 문 자 를 구분 하지 않 기 위해 일치 합 니 다! ~와!대소 문자 구분 이 일치 하지 않 고 대소 문자 구분 이 일치 하지 않 습 니 다.
파일 및 디 렉 터 리 일치
- f 와! -f. 파일 이 존재 하 는 지 여 부 를 판단 하 는 데 사용 합 니 다. - d 와! -d 디 렉 터 리 존재 여 부 를 판단 하 는 데 사용 - e 와! -e. 파일 이나 디 렉 터 리 가 존재 하 는 지 판단 하 는 데 사용 합 니 다. - x 와! -x. 파일 이 실 행 될 수 있 는 지 여 부 를 판단 하 는 데 사용 합 니 다.
flag 태그
last 는 아파 치 의 [L] 태그 와 같 습 니 다. rewrite break 종료 가 완료 되 었 고 뒤의 규칙 과 일치 하지 않 습 니 다.redirect 302 임시 주소 표시 줄 로 돌아 가면 점프 후의 주 소 를 표시 합 니 다.permanent 301 로 영구적 으로 주소 표시 줄 을 바 꾸 면 점프 후의 주 소 를 표시 합 니 다.
  logcation 의 몇 가지 인 스 턴 스:
   1)location  / {}: 모든 요청 이 / 로 시작 되 기 때문에 모든 조회 와 일치 합 니 다.그러나 정규 표현 식 규칙 은 우선 검색 과 일치 합 니 다.   2) location = / {}: 일치 만 /   3)location ~* \.(gif|jpg|jpeg)$
     {         rewrite \.(gif|jpg)$ /logo.png;      }:location 는 대소 문 자 를 구분 하지 않 고 gif, jpg, jpeg 로 끝 나 는 모든 파일 과 일치 합 니 다.
몇 개의 실례:
다 중 디 렉 터 리 매개 변수 로 전환 요구: abc. dominan. com / sor / 2 = > abc. dominan. com / index. php? act = sort & name = abc & id = 2 규칙 설정:
 
  
if ($host ~* (.*)\.domain\.com) {
    set $sub_name $1;
    rewrite ^/sort\/(\d+)\/?$ /index.php?act=sort&cid=$sub_name&id=$1 last;
}

디 렉 터 리 교환
요구: / 123456 / xxxx - > / xxxx? id = 123456
규칙 설정:
rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;
 
브 라 우 저 에 최 적 화 된 자동 rewrite 를 추가 합 니 다. 여기 rewrite 후의 디 렉 터 리 는 존재 할 수 있 습 니 다.
예 를 들 어 nginx 가 사용자 가 ie 를 사용 할 때 / nginx - ie 디 렉 터 리 로 재 설정 합 니 다.
규칙 은 다음 과 같 습 니 다.
 
  
 if ($http_user_agent ~ MSIE) {
     rewrite ^(.*)$ /nginx-ie/$1 break;
}

디 렉 터 리 에 "/" 를 자동 으로 추가 합 니 다. 이 기능 은 일반 브 라 우 저 에서 자동 으로 완 료 됩 니 다.
 
  
if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}

다음은 넓 은 의미 의 rewrite 재 작성 과 무관 할 수 있 습 니 다.
htaccess 금지
 
  
location ~/\.ht {
    deny all;
}
[code]

[code]
location ~ ^/(cron|templates)/ {
    deny all; break;
}

/ data 로 시작 하 는 파일 을 금지 합 니 다. / data / 다음 다단 계 디 렉 터 리 에서. log. txt 등 요청 을 금지 할 수 있 습 니 다.
 
  
location ~ ^/data {
    deny all;
}

단일 파일 금지
 
  
location ~ /data/sql/data.sql {
    deny all;
}

favicon. ico 와 robots. txt 에 만 료 시간 설정 하기;여 기 는 favicon. ico 는 99 일 이 며, robots. txt 는 7 일 이 며 404 오류 로 그 를 기록 하지 않 습 니 다.
 
  
location ~(favicon.ico) {
    log_not_found off;
    expires 99d;
    break;
}
location ~(robots.txt) {
    log_not_found off;
    expires 7d;
    break;
}

어떤 파일 의 브 라 우 저 캐 시 만 료 시간 설정 하기;여 기 는 600 초 입 니 다. 방문 로 그 를 기록 하지 않 습 니 다.
 
  
location ^~ /html/scripts/loadhead_1.js {
    access_log off;
    expires 600;
    break;
}

Nginx 는 또한 특정한 유형의 파일 의 유통 기한 을 사용자 정의 할 수 있 습 니 다. 구체 적 으로 다음 코드 를 볼 수 있 습 니 다.
 
  
location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {
if (-f $request_filename) {
   expires    1h;
   break;
  }
  }
// js|css|jpg|jpeg|gif|png|swf 。

도 난 방지 체인 의 설정:
도 난 방지 체인: 만약 에 당신 의 사이트 가 다운로드 사이트 라면 다운로드 절 차 는 먼저 당신 의 홈 페이지 를 통 해 다운로드 주 소 를 찾 아야 다운로드 할 수 있 습 니 다. 일부 네티즌 들 이 직접 다운로드 주 소 를 방문 하여 홈 페이지 를 통 해 다운로드 하지 않 는 것 을 방지 하기 위해 우 리 는 도 난 방지 체인 의 방식 을 사용 할 수 있 습 니 다. 구체 적 인 코드 는 다음 과 같 습 니 다.
 
  
location ~* \.(gif|jpg|swf)$ {
  valid_referers none blocked start.igrow.cn sta.igrow.cn;
  if ($invalid_referer) {
  rewrite ^/ http://$host/logo.png;
  }
}

파일 도 난 방지 및 만 료 시간 설정 -
 
  
location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
    valid_referers none blocked *.jb51.net *.jjonline.com.cn *.lanwei.org *.jjonline.org localhost  42.121.107.189;
    if ($invalid_referer) {
        rewrite ^/ http://img.jb51.net/forbid.gif;
        return 417;
        break;
    }
    access_log off;
    break;
}

설명:  여기 return 417 은 사용자 정의 http 상태 코드 입 니 다. 기본 값 은 403 입 니 다. nginx 의 log 파일 을 통 해 정확 한 도 킹 요청 주 소 를 찾 을 수 있 습 니 다. "rewrite ^ /http://img.jb51.net/forbid.gif"도 난 방지 체인 그림 표시 "access log off;" 접근 로 그 를 기록 하지 않 고 스트레스 를 줄 입 니 다. "expires 3d" 모든 파일 의 3 일 브 라 우 저 캐 시    고정 ip 로 웹 사 이 트 를 방문 하고 비밀 번 호 를 추가 할 수 있 습 니 다.이것 은 권한 인증 이 있 는 응용 에 비교적 익숙 하 다.
 
  
location \ {
    allow 22.27.164.25; # ipd
    deny all;
    auth_basic “KEY”; #
    auth_basic_user_file htpasswd;
}

설명: location 의 응용 에 도 여러 가지 변화 가 있 는데 여기 서 쓰 는 방법 은 루트 디 렉 터 리 를 겨냥 한 것 입 니 다.파일 과 디 렉 터 리 가 존재 하지 않 을 때 방향 을 바 꿉 니 다.
 
  
if (!-e $request_filename) {
    #proxy_pass http://127.0.0.1; # ip, ip web
    rewrite ^/ //www.jb51.net/none.html;  #
    #return 404; # 404 , root 404.html
}

도 메 인 이름 이동
 
  
server {
    listen 80;
    server_name jump.jb51.net ;#
    index index.html index.htm index.php; #
    root /var/www/public_html/; #
    rewrite ^/ //www.jb51.net/;
    #rewrite , : jump.jb51.net , www.jb51.net
    access_log off;
}

다 중 도 메 인 이름 전환
 
  
server {
    listen 80;
 
    server_name www.jb51.net www.jjonline.org;
    index index.html index.htm index.php;
    root /var/www/public_html/;
    if ($host ~ “jjonline\.org”) {
        rewrite ^(.*) //www.jb51.net$1 permanent;
    }
}

3 레벨 도 메 인 이름 이동
 
  
if ($http_host ~* “^(.*)\.i\.jjonline\.cn$”) {
    rewrite ^(.*) http://demo.jb51.net$1;
    break;
}

도 메 인 이름
 
  
server {
    listen 80;
    server_name mirror.jb51.net;
    index index.html index.htm index.php;
    root /var/www/public_html;
    rewrite ^/(.*) //www.jb51.net/$1 last;
    access_log off;
}

어떤 하위 디 렉 터 리 가 거울 방향 으로 되 어 있 는데, 여기 의 예 는 demo 하위 디 렉 터 리 입 니 다.
 
  
location ^~ /demo {
    rewrite ^.+ http://demo.jb51.net/ last;
    break;
}

다음은 본 블 로그 의 rewrite 쓰기, emlog 시스템 의 rewrite 를 첨부 합 니 다.
 
 
  
location ~ {
    if (!-e $request_filename) {
           rewrite ^/(.+)$ /index.php last;
    }
}

nginx rewrite 재 작성 규칙 설정 튜 토리 얼
rewrite 가 나 올 수 있 는 곳 은 4 개: NGXHTTP_SRV_CONF,NGX_HTTP_SIF_CONF,NGX_HTTP_LOC_CONF,NGX_HTTP_LIF_CONF。각각 대응: NGXHTTP_SRV_CONF: 파일 에 있 는 server 필드 의 모든 곳 을 설정 합 니 다.NGX_HTTP_SIF_CONF: 설정 파일 의 server 도 메 인 에 있 는 if 설정 중;NGX_HTTP_LOC_CONF: 파일 의 location 필드 의 모든 곳 을 설정 합 니 다.NGX_HTTP_LIF_CONF: 설정 파일 의 location 필드 의 if 설정 중;
예:
 
  
//...
server {
    //...
    rewrite "^/+$" /index.php  break;
 
    if ($uri ~* "^/+abc") {
        rewrite "^/+abc" /abc/index.php break;
    }
 
    location /xy {
        rewrite "^/+xy$" /xy/index.php  break;
    }
}

그 중에서 location 의 상세 한 설명 과 location 의 강력 한 기능 은 본 사이트 검색 상자 에 'ngingx location' 을 입력 하여 검색 할 수 있 습 니 다.보충 1, break 명령 기본 값: none;사용 환경: server, location, if;이 명령 의 역할 은 현재 규칙 집합 을 완성 하고 rewrite 명령 을 처리 하지 않 는 것 입 니 다.2, if 명령 의 기본 값: none;사용 환경: server, location 이 명령 은 조건 이 맞 는 지 확인 하 는 데 사 용 됩 니 다. 조건 이 맞 으 면 괄호 안의 문 구 를 실행 합 니 다.If 명령 은 끼 워 넣 기 를 지원 하지 않 습 니 다. 여러 조건 & & | 처 리 는 지원 되 지 않 습 니 다.
 
  
A. , : "" 0
B. "="( ) "!="( )
C. "~*" "~"
D."~"
E."~*"
F."!~" "!~*" "~"、"~*" ,
G."-f" "!-f"
H."-d" "!-d"
I."-e" "!-e"
J."-x" "!-x"
K. () , $1~$9

3, return 명령
문법: return code;사용 환경: server, location, if;이 명령 은 규칙 의 실행 을 끝내 고 상태 코드 를 클 라 이언 트 에 게 되 돌려 주 는 데 사 용 됩 니 다.예 를 들 어 방문 한 URL 이 ". sh" 또는 ". bash" 로 끝나 면 403 상태 코드 를 되 돌려 줍 니 다.
 
  
location ~ .*.(sh|bash)?$
{
return 403;
}

4, rewrite 명령 문법: rewrite regex replacement flag 기본 값: none;사용 환경: server, location, if 이 명령 은 표현 식 에 따라 URI 를 바 꾸 거나 문자열 을 수정 합 니 다.명령 은 설정 파일 의 순서에 따라 실 행 됩 니 다.표현 식 을 다시 쓰 는 것 은 상대 경로 에 만 유효 합 니 다.호스트 이름 을 맞 추 려 면 if 문 구 를 사용 해 야 합 니 다. 예제 는 다음 과 같 습 니 다.
 
  
if( $host ~* www.(.*) )
{
set $host_without_www $1;
rewrite  ^(.*)$  http://$host_without_www$1 permanent;
}

rewrite 명령 의 마지막 매개 변 수 는 flag 태그 입 니 다. flag 표 시 를 지원 합 니 다.
1.last     apache 에 있 는 [L] 태그 에 해당 하 며 rewrite 를 표시 합 니 다.2. break 이 규칙 이 일치 하면 일치 하지 않 고 뒤의 규칙 과 일치 하지 않 습 니 다.3.redirect  302 임시 방향 을 바 꾸 면 브 라 우 저 주 소 는 점프 후의 URL 주 소 를 표시 합 니 다.4.permanent  301 로 영구적 으로 방향 을 바 꾸 면 브 라 우 저 주 소 는 점프 후의 URL 주 소 를 표시 합 니 다.  last 와 break 를 사용 하여 URI 재 작성 을 실현 합 니 다. 브 라 우 저 주소 표시 줄 은 변 하지 않 습 니 다.그리고 이들 은 미세한 차이 가 있 기 때문에 alias 명령 을 사용 하려 면 last 로 표시 해 야 합 니 다.proxy 사용pass 명령 시 break 표 시 를 사용 해 야 합 니 다.Last 표 시 는 이 rewrite 규칙 이 실 행 된 후 서버 {...} 탭 에 다시 요청 합 니 다. break 표 시 는 이 규칙 이 일치 한 후에 일치 하지 않 습 니 다.  일반적으로 location (location / {...}) 이나 server 탭 에서 rewrite 규칙 을 직접 작성 합 니 다. last 표 시 를 사용 하 는 것 을 추천 합 니 다.비 루트 location (location / cms / {...}) 에 서 는 break 를 사용 합 니 다.  URI 에 인자 (/ app / test. php? id = 5) 가 포함 되 어 있 으 면 기본 적 인 상황 에서 매개 변 수 는 자동 으로 교체 문자열 에 추 가 됩 니 다. 교체 문자열 의 끝 에 추가 할 수 있 습 니까?표 시 를 해서 이 문 제 를 해결 하 다.예 를 들 면:
 
  
rewrite ^/test(.*)$ //www.jb51.net/home  permanent;
//www.jb51.net/test?id=5 //www.jb51.net/home?id=5

예 를 들 어 URL / photo / 123456 을 / path / to / photo / 12 / 1234 / 123456. png 로 재 설정 하면
 
  
Rewrite "/photo/([0-9]{2})([0-9]{2})([0-9]{2})" /path/to/photo/$1/$1$2/$1$2$3.png ;

주: 정규 표현 식 에 괄호 '{' 또는 '}' 이 있 으 면 작은 따옴표 나 작은 따옴표 를 사용 해 야 합 니 다.Linux 학습, http: / / linux. it. net. cn  5。Set 명령 어 문법: set variable value;기본 값: none;사용 환경: server, location, if;이 명령 은 변 수 를 정의 하고 변 수 를 할당 하 는 데 사 용 됩 니 다.변수의 값 은 텍스트, 변수, 텍스트 변수의 결합 을 할 수 있 습 니 다.예: set $varname "hello world";  6,Uninitialized_variable_warn 명령 어 문법: uninitializedvariable_warn on | off 사용 환경: http, server, location, if 이 명령 은 변 수 를 초기 화하 지 않 은 경고 정 보 를 열 고 닫 는 데 사 용 됩 니 다. 기본 값 은 열 립 니 다.  7, Nginx Rewrite 에서 사용 할 수 있 는 전역 변수
 
  
$args ,$content_length ,$content_type ,$document_root ,$document_uri ,$host ,$http_user_agent ,$http_cookie ,$limit_rate ,$request_body_file ,$request_method ,$remote_addr ,
$remote_port ,$remote_user ,$request_filename ,$request_uri ,$query_string ,$scheme ,$server_protocol ,$server_addr ,$server_name ,$server_port ,$uri

Nginx 의 Rewrite 규칙 작성 인 스 턴 스 1. 방문 한 파일 과 디 렉 터 리 가 존재 하지 않 을 때 phop 파일 로 다시 설정 합 니 다.
 
  
if( !-e $request_filename )
{
rewrite ^/(.*)$ index.php last;
}

2. 디 렉 터 리 교환 / 123456 / xxxx  ====>   /xxxx?id=123456
 
  
rewrite ^/(d+)/(.+)/  /$2?id=$1 last;

3. 클 라 이언 트 가 IE 브 라 우 저 를 사용한다 면 / ie 디 렉 터 리 로 다시 설정 합 니 다.
 
  
if( $http_user_agent  ~ MSIE)
{
rewrite ^(.*)$ /ie/$1 break;
}

4. 여러 디 렉 터 리 접근 금지
 
  
location ~ ^/(cron|templates)/
{
deny all;
break;
}

5. / data 로 시작 하 는 파일 에 접근 금지
 
  
location ~ ^/data
{
deny all;
}

6.. sh,. flv,. mp3 를 파일 접미사 이름 으로 하 는 파일 에 접근 하지 못 함
 
  
location ~ .*.(sh|flv|mp3)$
{
return 403;
}

7. 특정 파일 의 브 라 우 저 캐 시 시간 설정
 
  
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*.(js|css)$
{
expires 1h;
}

8. favicon. ico 와 robots. txt 에 만 료 시간 을 설정 합 니 다.
여 기 는 favicon. ico 는 99 일 이 며, robots. txt 는 7 일 이 며 404 오류 로 그 를 기록 하지 않 습 니 다.
 
 
  
 location ~(favicon.ico) {
log_not_found off;
expires 99d;
break;
}
                                                             
location ~(robots.txt) {
log_not_found off;
expires 7d;
break;
}
 
 

9. 어떤 파일 의 만 료 시간 을 설정 합 니 다.여 기 는 600 초 입 니 다. 방문 로 그 를 기록 하지 않 습 니 다.
 
  
location ^~ /html/scripts/loadhead_1.js {
access_log   off;
root /opt/lampp/htdocs/web;
expires 600;
break;
}

좋은 웹페이지 즐겨찾기