zoukankan      html  css  js  c++  java
  • nginx rewrite规则last与break的区别

    概要:
    break和last都能阻止继续执行后面的rewrite指令,last如果在location下的话,对于重写后的URI会重新匹配location,而break不会重新匹配location。

    区别:
    last:停止当前这个请求,并根据rewrite匹配的规则重新发起一个请求。新请求又从第一阶段开始执行…
    break:相对last,break并不会重新发起一个请求,只是跳过当前的rewrite阶段,并执行本请求location后续的执行阶段…
    例子(在nginx的vhosts目录下面创建一个test.conf,ip为192.168.1.210):

    server {
        listen 8888;
        server_name www.doubi.com;
        root /user/local/nginx/html;
    
        location /break/ {
            rewrite ^/break/(.*) /test/$1 break;
            echo "break page";
            echo "break1 page";
        } 
    
        location /last/ {
            rewrite ^/last/(.*) /test/$1 last;
            echo "last page";
        }  
    
        location /test/ {
            echo "test page";
        }
    }

    在请求之前,需要给nginx添加echo-nginx-module模块,使nginx支持echo
    链接:https://github.com/agentzh/echo-nginx-module

    请求:192.168.1.210:8888/break/***
    结果:break page
    break1 page
    分析:break是跳过当前请求的rewrite阶段,并继续执行本请求的其他阶段,如果你把/break里面的echo注释,再次访问会出现404,我们访问第一次虽然/break/***会被重定向到/test/***,break指令不会重新开启一个新的请求继续匹配,所以nginx是不会匹配到下面的/test/这个location,echo指令被注释的情况下,/break/ 这location里只能执行nginx默认的内容指令,即尝试找/test/xx这个html页面并输出起内容,事实上,这个页面不存在,所以会报404的错误
    请求:192.168.1.210:8888/last/***
    结果:test page
    分析:last与break最大的不同是,last会重新发起一个新请求,并重新匹配location,所以对于/last,重新匹配请求以后会匹配到/test/,所以最终对应的content阶段的输出是test page;

    还有一个小例:

    location / {
        if (!-e $request_filename){
            rewrite ^/(.*)$ /index.php/$1 last;
        }
    }        

    分析:假如我网站名为www.doubi.com,访问www.doubi.com相当于访问www.doubi.com/index.php,如果访问的为www.doubi.com/course/learn,后面跟last,重写后的URI会重新匹配location,相当于是访问了www.doubi.com/index.php/course/learn,
    反之后面是break,并不会重新发起一个请求,请求上述URI会出现404找不到。

  • 相关阅读:
    黑板客爬虫闯关 代码
    新浪云SAE搭建python环境 问题拾遗
    关于python中的字符串编码理解
    linux环境中使用转义字符使命令行字符颜色高亮
    python中list作为全局变量无需global声明的原因
    获取youku视频下载链接(wireshark抓包分析)
    改变linux默认配色方案(dircolors和dircolors-solarized使用)
    限流常规设计和实例
    连接池-Mybatis源码
    Transaction-Mybatis源码
  • 原文地址:https://www.cnblogs.com/654wangzai321/p/8000756.html
Copyright © 2011-2022 走看看