ngx rewrite 방법 으로 ngx conf 파일 간소화

6506 단어 nginxrewrite
반찬 이 ngx 에 대한 사용 은 '복잡 하고 실현 가능 하 다' 는 정도 에 머 물 러 있 습 니 다. 작성 한 ngx 프로필 은 사용 할 수 있 지만 눈 썰 미가 좋 은 사람 에 게 '오, shit!' 라 고 욕 하고 싶 습 니 다.
        그동안 rewrite 에 대한 이 해 는 감성 적 인 url 재 작성 차원 에 머 물 렀 고 왜 재 작성 을 해 야 하 는 지 에 대해 서 는 깨 닫 지 못 했다.다음은 최근 프로젝트 시간 과 결합 하여 rewrite 에 대한 인식 을 이야기 하 겠 습 니 다.
1. rest 화 된 url 에 대한 요청 방식 rewrite
e.g
RESTFUL uri——
http://example.com/user/$uid/photo
필요:
요청 모드
기대 처리
GET
어떤 사진 의 정 보 를 가 져 옵 니 다.
POST
사진 추가
PUT
사진 정보 업데이트
DELETE
사진 삭제
        상기 수요 에 대하 여 rewrite 로 처리 하여 실현 할 수 있 습 니 다.
서로 다른 업무 요청 방식 은 서로 다른 백 엔 드 처리 논리 에 반영 할 수 있다.

server{
    server_name example.com ;
    if ( $request_method = GET ){
        rewrite ^(/user/(.*)/photo)$ index.php?do=get_photo&uid=$2 break;
    }
    if ( $request_method = POST ){
        rewrite ^(/user/(.*)/photo)$ index.php?do=add_photo&uid=$2 break;
    }
    if ( $request_method = PUT ){
        rewrite ^(/user/(.*)/photo)$ index.php?do=update_photo&uid=$2    break;
    }
    if ( $request_method = DELETE ){
        rewrite ^(/user/(.*)/photo)$ index.php?do=del_photo&uid=$2   break;
    }
}

2. 금 옥 그 밖의 '망 가 진 솜' 중
        전단 에 우아 한 url 을 보 여주 기 위해 rewrite 를 이용 하여 url 에서 필요 한 매개 변 수 를 분석 하여 백 엔 드 논리 에 투사 하여 처리 합 니 다.
3. "깔때기" 식 백 스테이지 처리
        서로 다른 전단 url 은 rewrite 를 기반 으로 백 엔 드 처리 입 구 를 통일 합 니 다.예 를 들 어 설명:
        그림 이 보 여 주 는 두 가지 url:
url
설명 하 다.
http://example.com/([^/]*).jpg
그림 시스템 저장 기본 생 성 url
http://example.com/d/(.*)  
그림 시스템 은 사용자 정의 url 을 지원 합 니 다.
반찬 의 초기 nginx 규칙 은:

location ~ ^/d/(.*)$ {
    root           ${SRC_ROOT}/apps/fnt ;
    expires max;
    fastcgi_cache   cache_php;
    set $PREFIX "";
    if ( $request_method = HEAD ) {
        set $PREFIX "HEAD_"; 
    }                  
    fastcgi_cache_key $PREFIX$1;
    fastcgi_cache_valid 200 302 3d;
    fastcgi_cache_valid 301 1d;
    fastcgi_cache_valid any 1m;
    fastcgi_cache_min_uses 1;
    fastcgi_cache_use_stale error timeout invalid_header http_500;
    tcp_nodelay on;
   
    include        fastcgi_params ;
    fastcgi_pass   127.0.0.1:${CGI_PORT};
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  ${SRC_ROOT}/apps/fnt/index.php ;
    fastcgi_param  QUERY_STRING     do=d&path=$1 ;

    client_max_body_size       100m;
    fastcgi_connect_timeout 1000s;
    fastcgi_send_timeout 1000s;
    fastcgi_read_timeout 1000s;
}
 location ~ ^/([^/]*)\.(jpg|png|bmp|gif)$ {
     root           ${SRC_ROOT}/apps/fnt ;
     expires max;
     fastcgi_cache   cache_php;
     set $PREFIX "";
     if ( $request_method = HEAD ) {  
         set $PREFIX "HEAD_";    
     }
     fastcgi_cache_key $PREFIX$1;
     fastcgi_cache_valid 200 302 3d;
     fastcgi_cache_valid 301 1d;
     fastcgi_cache_valid any 1m;
     fastcgi_cache_min_uses 1;
     fastcgi_cache_use_stale error timeout invalid_header http_500;
     open_file_cache max=204800 inactive=20s;
     open_file_cache_min_uses 1;
     open_file_cache_valid 30s;
     tcp_nodelay on;

     include        fastcgi_params ;
     fastcgi_pass   127.0.0.1:${CGI_PORT};
     fastcgi_index  index.php;
     fastcgi_param  SCRIPT_FILENAME  ${SRC_ROOT}/apps/fnt/index.php ;
     fastcgi_param  QUERY_STRING     key=$1&postfix=$2 ;

     client_max_body_size       100m;
     fastcgi_connect_timeout 1000s;
     fastcgi_send_timeout 1000s;
     fastcgi_read_timeout 1000s;
}

눈 썰 미가 있 는 사람 은 한눈 에 알 아 볼 수 있 지만, 속 의 번 거 로 움 을 알 수 있다.
스승 의 지도 아래 rewrite 를 이용 하여 다음 과 같이 수정 합 니 다.

 location ~* ^/([^/]*)\.(jpg|png|bmp|gif)$ {
    rewrite ^/([^/]*)\.(jpg|png|bmp|gif)$ /backend/?key=$1&postfix=$2 last;
 }     
 location ~ ^/d/(.*)$ {
    rewrite ^/d/(.*)$ /backend/?path=$1&do=d
 }     
 location = /backend/ {
     internal;
     root           ${SRC_ROOT}/apps/fnt ;
     set $key $arg_path; 
     if ( $key = "" ){
         set $key $arg_key;  
     }
     expires max;  
     fastcgi_cache   cache_php;  
     set $PREFIX "";
     if ( $request_method = HEAD ){ 
        set $PREFIX "HEAD_"; 
     } 
     fastcgi_cache_key $PREFIX$1; 
     fastcgi_cache_valid 200 302 3d;                                 
     fastcgi_cache_valid 301 1d;                                     
     fastcgi_cache_valid any 1m;                                     
     fastcgi_cache_min_uses 1;                                       
     fastcgi_cache_use_stale error timeout invalid_header http_500;  
     open_file_cache max=204800 inactive=20s;                        
     open_file_cache_min_uses 1;                                     
     open_file_cache_valid 30s;                                      
     tcp_nodelay on;                                                 
                                                                
     include        fastcgi_params ;
     fastcgi_pass   127.0.0.1:${CGI_PORT};                           
     fastcgi_index  index.php;                                       
     fastcgi_param  SCRIPT_FILENAME  ${SRC_ROOT}/apps/fnt/index.php ;
     fastcgi_param  QUERY_STRING     $query_string;                  
                                                                  
     client_max_body_size       100m;                                
     fastcgi_connect_timeout 1000s;                                  
     fastcgi_send_timeout 1000s;                                     
     fastcgi_read_timeout 1000s;                                     
 }                                            

많이 상 큼 해 졌 죠?나무 있어?!

좋은 웹페이지 즐겨찾기