打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用ngx rewrite方法简化ngx conf文件
             小菜对ngx的使用仍停留在“复杂可实现”的程度,写出的ngx配置文件,虽然可用,但让明眼人一看不禁想骂一句“oh,shit!”
        之前对rewrite的了解只停留在感性的url重写的层面上,对于为什么要进行重写没有体会。下面结合最近的项目时间谈谈对rewrite的认识
1. 对于rest化的url针对请求方式进行rewrite
e.g
RESTFUL uri——http://example.com/user/$uid/photo
需求:
请求方式期望处理
GET获取某一张照片的信息
POST添加照片
PUT更新照片信息
DELETE删除照片

        针对上述需求完全可以用rewrite进行处理,从而实现不同的业务请求方式可以映射到不同的后端处理逻辑中
Php代码  
  1. server{  
  2.     server_name example.com ;  
  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. 金玉其外“败絮”其中
        为前端展现优雅的url,利用rewrite从url中解析出需要的参数,映射到后端逻辑进行处理
3.“漏斗”式后台处理
        不同的前端url,基于rewrite统一后端处理入口。举例说明:
        图片展现的两种url:
url说明
http://example.com/([^/]*).jpg 图片系统存储默认生成的url
http://example.com/d/(.*)   图片系统支持用户自定义url

小菜初始的nginx规则为:
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. }  

明眼人一眼就能看出,里面的冗余
在师傅的指导下利用rewrite进行修改如下:
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. }                                              

是不是清爽了许多?有木有?!   
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
linux+Nginx+Memcache+Mysql+php 服务器 安装配置开发笔记(一)
【Nginx22】Nginx学习:FastCGI模块(四)错误处理及其它
FastCGI模块(FastCGI)
让Nginx支持ThinkPHP的URL重写和PATHINFO
使用Nginx的proxy_cache缓存取代Varnish
nginx 常用模块整理
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服