日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

使用ngx rewrite方法簡(jiǎn)化ngx conf文件

 WindySky 2017-03-10
             小菜對(duì)ngx的使用仍停留在“復(fù)雜可實(shí)現(xiàn)”的程度,寫出的ngx配置文件,雖然可用,但讓明眼人一看不禁想罵一句“oh,shit!”
        之前對(duì)rewrite的了解只停留在感性的url重寫的層面上,對(duì)于為什么要進(jìn)行重寫沒(méi)有體會(huì)。下面結(jié)合最近的項(xiàng)目時(shí)間談?wù)剬?duì)rewrite的認(rèn)識(shí)
1. 對(duì)于rest化的url針對(duì)請(qǐng)求方式進(jìn)行rewrite
e.g
RESTFUL uri——http:///user/$uid/photo
需求:
請(qǐng)求方式期望處理
GET獲取某一張照片的信息
POST添加照片
PUT更新照片信息
DELETE刪除照片

        針對(duì)上述需求完全可以用rewrite進(jìn)行處理,從而實(shí)現(xiàn)不同的業(yè)務(wù)請(qǐng)求方式可以映射到不同的后端處理邏輯中
Php代碼  收藏代碼
  1. server{  
  2.     server_name  ;  
  3.     if ( $request_method = GET ){  
  4.         rewrite ^(/user/(.*)/photo)$ index.php?do=get_photo&uid=$2 break;  
  5.     }  
  6.     if ( $request_method = POST ){  
  7.         rewrite ^(/user/(.*)/photo)$ index.php?do=add_photo&uid=$2 break;  
  8.     }  
  9.     if ( $request_method = PUT ){  
  10.         rewrite ^(/user/(.*)/photo)$ index.php?do=update_photo&uid=$2    break;  
  11.     }  
  12.     if ( $request_method = DELETE ){  
  13.         rewrite ^(/user/(.*)/photo)$ index.php?do=del_photo&uid=$2   break;  
  14.     }  
  15. }  

2. 金玉其外“敗絮”其中
        為前端展現(xiàn)優(yōu)雅的url,利用rewrite從url中解析出需要的參數(shù),映射到后端邏輯進(jìn)行處理
3.“漏斗”式后臺(tái)處理
        不同的前端url,基于rewrite統(tǒng)一后端處理入口。舉例說(shuō)明:
        圖片展現(xiàn)的兩種url:
url說(shuō)明
http:///([^/]*).jpg 圖片系統(tǒng)存儲(chǔ)默認(rèn)生成的url
http:///d/(.*)   圖片系統(tǒng)支持用戶自定義url

小菜初始的nginx規(guī)則為:
Php代碼  收藏代碼
  1. location ~ ^/d/(.*)$ {  
  2.     root           ${SRC_ROOT}/apps/fnt ;  
  3.     expires max;  
  4.     fastcgi_cache   cache_php;  
  5.     set $PREFIX "";  
  6.     if ( $request_method = HEAD ) {  
  7.         set $PREFIX "HEAD_";   
  8.     }                    
  9.     fastcgi_cache_key $PREFIX$1;  
  10.     fastcgi_cache_valid 200 302 3d;  
  11.     fastcgi_cache_valid 301 1d;  
  12.     fastcgi_cache_valid any 1m;  
  13.     fastcgi_cache_min_uses 1;  
  14.     fastcgi_cache_use_stale error timeout invalid_header http_500;  
  15.     tcp_nodelay on;  
  16.      
  17.     include        fastcgi_params ;  
  18.     fastcgi_pass   127.0.0.1:${CGI_PORT};  
  19.     fastcgi_index  index.php;  
  20.     fastcgi_param  SCRIPT_FILENAME  ${SRC_ROOT}/apps/fnt/index.php ;  
  21.     fastcgi_param  QUERY_STRING     do=d&path=$1 ;  
  22.   
  23.     client_max_body_size       100m;  
  24.     fastcgi_connect_timeout 1000s;  
  25.     fastcgi_send_timeout 1000s;  
  26.     fastcgi_read_timeout 1000s;  
  27. }  
  28.  location ~ ^/([^/]*)\.(jpg|png|bmp|gif)$ {  
  29.      root           ${SRC_ROOT}/apps/fnt ;  
  30.      expires max;  
  31.      fastcgi_cache   cache_php;  
  32.      set $PREFIX "";  
  33.      if ( $request_method = HEAD ) {    
  34.          set $PREFIX "HEAD_";      
  35.      }  
  36.      fastcgi_cache_key $PREFIX$1;  
  37.      fastcgi_cache_valid 200 302 3d;  
  38.      fastcgi_cache_valid 301 1d;  
  39.      fastcgi_cache_valid any 1m;  
  40.      fastcgi_cache_min_uses 1;  
  41.      fastcgi_cache_use_stale error timeout invalid_header http_500;  
  42.      open_file_cache max=204800 inactive=20s;  
  43.      open_file_cache_min_uses 1;  
  44.      open_file_cache_valid 30s;  
  45.      tcp_nodelay on;  
  46.   
  47.      include        fastcgi_params ;  
  48.      fastcgi_pass   127.0.0.1:${CGI_PORT};  
  49.      fastcgi_index  index.php;  
  50.      fastcgi_param  SCRIPT_FILENAME  ${SRC_ROOT}/apps/fnt/index.php ;  
  51.      fastcgi_param  QUERY_STRING     key=$1&postfix=$2 ;  
  52.   
  53.      client_max_body_size       100m;  
  54.      fastcgi_connect_timeout 1000s;  
  55.      fastcgi_send_timeout 1000s;  
  56.      fastcgi_read_timeout 1000s;  
  57. }  

明眼人一眼就能看出,里面的冗余
在師傅的指導(dǎo)下利用rewrite進(jìn)行修改如下:
Php代碼  收藏代碼
  1. location ~* ^/([^/]*)\.(jpg|png|bmp|gif)$ {  
  2.    rewrite ^/([^/]*)\.(jpg|png|bmp|gif)$ /backend/?key=$1&postfix=$2 last;  
  3. }       
  4. location ~ ^/d/(.*)$ {  
  5.    rewrite ^/d/(.*)$ /backend/?path=$1&do=d  
  6. }       
  7. location = /backend/ {  
  8.     internal;  
  9.     root           ${SRC_ROOT}/apps/fnt ;  
  10.     set $key $arg_path;   
  11.     if ( $key = "" ){  
  12.         set $key $arg_key;    
  13.     }  
  14.     expires max;    
  15.     fastcgi_cache   cache_php;    
  16.     set $PREFIX "";  
  17.     if ( $request_method = HEAD ){   
  18.        set $PREFIX "HEAD_";   
  19.     }   
  20.     fastcgi_cache_key $PREFIX$1;   
  21.     fastcgi_cache_valid 200 302 3d;                                   
  22.     fastcgi_cache_valid 301 1d;                                       
  23.     fastcgi_cache_valid any 1m;                                       
  24.     fastcgi_cache_min_uses 1;                                         
  25.     fastcgi_cache_use_stale error timeout invalid_header http_500;    
  26.     open_file_cache max=204800 inactive=20s;                          
  27.     open_file_cache_min_uses 1;                                       
  28.     open_file_cache_valid 30s;                                        
  29.     tcp_nodelay on;                                                   
  30.                                                                  
  31.     include        fastcgi_params ;  
  32.     fastcgi_pass   127.0.0.1:${CGI_PORT};                             
  33.     fastcgi_index  index.php;                                         
  34.     fastcgi_param  SCRIPT_FILENAME  ${SRC_ROOT}/apps/fnt/index.php ;  
  35.     fastcgi_param  QUERY_STRING     $query_string;                    
  36.                                                                    
  37.     client_max_body_size       100m;                                  
  38.     fastcgi_connect_timeout 1000s;                                    
  39.     fastcgi_send_timeout 1000s;                                       
  40.     fastcgi_read_timeout 1000s;                                       
  41. }                                              

是不是清爽了許多?有木有?!   

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多