网站首页 文章专栏 nginx location匹配命令

nginx location匹配命令

编辑时间:2019-10-10 14:54:11 作者:苹果 浏览量:2998





location匹配命令

    ~      #波浪线表示执行一个正则匹配,区分大小写
    ~*    #表示执行一个正则匹配,不区分大小写
    ^~    #^~表示普通字符匹配,如果该选项匹配,只匹配该选项,不匹配别的选项,一般用来匹配目录
    =      #进行普通字符精确匹配
    @     #"@" 定义一个命名的 location,使用在内部定向时,例如 error_page, try_files


location 匹配的优先级(与location在配置文件中的顺序无关)
    = 精确匹配会第一个被处理。如果发现精确匹配,nginx停止搜索其他匹配。
    普通字符匹配,正则表达式规则和长的块规则将被优先和查询匹配,也就是说如果该项匹配还需去看有没有正则表达式匹配和更长的匹配。
    ^~ 则只匹配该规则,nginx停止搜索其他匹配,否则nginx会继续处理其他location指令。
    最后匹配理带有"~"和"~*"的指令,如果找到相应的匹配,则nginx停止搜索其他匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。

    eg:

    location          = / {
          # 只匹配"/".
          [ configuration A ]
        }
        location  / {
          # 匹配任何请求,因为所有请求都是以"/"开始
          # 但是更长字符匹配或者正则表达式匹配会优先匹配
          [ configuration B ]
        }
        location ^~ /images/ {
          # 匹配任何以 /images/ 开始的请求,并停止匹配 其它location
          [ configuration C ]
        }
        location ~* .(gif|jpg|jpeg)$ {
          # 匹配以 gif, jpg, or jpeg结尾的请求.
          # 但是所有 /images/ 目录的请求将由 [Configuration C]处理.
          [ configuration D ]
        }


常用于业务机处理不同的请求


eg:

    server {
        listen       80;
        set $cookie_uid "";
        if ( $http_cookie ~* "uid=(\d+)(;)"){
           set $cookie_uid $1;
        }
        server_name  www.hebinghua.com;
        access_log   /data/logs/nginx/www.hebinghua.com.access.log  json_cookie;
        error_log    /data/logs/nginx/www.hebinghua.com.error.log  warn;
    
        add_header 'Access-Control-Allow-Origin' 'www.hebinghua.com';
    
    
        location ~* \.(zip|rar|7z|tar|gz|bz|cab|sh|gzip|tgz|exe|aspx|jsp)$ {
             return 404;
        }
    
        if ($http_user_agent ~* "YisouSpider") {
            return 403;
        }
    
          #该模块用于删除 html 、内嵌 javascript 和 css 中的注释以及重复的空白符。
        trim on;
        trim_js on;
        trim_css on;
    
    
    
          #500页面
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/nginx/html/www.hebinghua.com/;
        }
        #404页面
        set $page404       /404.html;
    
          #对指定的模块使用指定的404
        if ($request_uri ~* (bydls|study)/) {
           set $page404        /bydls/error.html;
        }
        error_page  404  $page404;
    }



    出自:何冰华个人网站

    地址:https://www.hebinghua.com/

    转载请注明出处


来说两句吧
最新评论