zoukankan      html  css  js  c++  java
  • Nginx配置基础-location

    location表达式类型

    ~ 表示执行一个正则匹配,区分大小写
    ~* 表示执行一个正则匹配,不区分大小写
    ^~ 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其他location。
    = 进行普通字符精确匹配。也就是完全匹配。
    常规字符串匹配。按前缀匹配。
    @ 它定义一个命名的 location,使用在内部定向时,例如 error_page, try_files

    location优先级说明

    nginx中location表达式的执行和配置中location的顺序没有太大关系。只与location表达式的类型有关。相同类型的表达式,字符串长的会优先匹配。
    以下是按优先级排列说明:
    等号类型(=)的优先级最高。一旦匹配成功,则不再查找其他匹配项。
    ^~类型表达式。一旦匹配成功,则不再查找其他匹配项。
    正则表达式类型(~ ~*)的优先级次之。如果有多个location的正则能匹配的话,则使用正则表达式最长的那个。
    常规字符串匹配类型。按前缀匹配。

    location优先级示例

    配置项如下:

    location / {
        # 匹配所有以 / 开头的请求。
        # 但是如果有更长的同类型的表达式,则选择更长的表达式。
        # 如果有正则表达式可以匹配,则优先匹配正则表达式。
        [ configuration B ]
    }
    location /documents/ {
        # 匹配所有以 /documents/ 开头的请求。
        # 但是如果有更长的同类型的表达式,则选择更长的表达式。
        # 如果有正则表达式可以匹配,则优先匹配正则表达式。
        [ configuration C ]
    }
    location ^~ /images/ {
        # 匹配所有以 /images/ 开头的表达式,如果匹配成功,则停止匹配查找。
        # 所以,即便有符合的正则表达式location,也不会被使用
        [ configuration D ]
    }
    location ~* .(gif|jpg|jpeg)$ {
        # 匹配所有以 gif jpg jpeg结尾的请求。
        # 但是 以 /images/开头的请求,将使用 Configuration D
        [ configuration E ]
    }

    location正则写法 

    location  / {
      # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
      # 但是正则和最长字符串会优先匹配
      [ configuration B ] 
    }
    location /documents/ {
      # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
      # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
      [ configuration C ] 
    }
    location ~ /documents/Abc {
      # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
      # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
      [ configuration CC ] 
    }
    location ^~ /images/ {
      # 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
      [ configuration D ] 
    }
    location ~* .(gif|jpg|jpeg)$ {
      # 匹配所有以 gif,jpg或jpeg 结尾的请求
      # 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则
      [ configuration E ] 
    }
    location /images/ {
      # 字符匹配到 /images/,继续往下,会发现 ^~ 存在
      [ configuration F ] 
    }
    location /images/abc {
      # 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
      # F与G的放置顺序是没有关系的
      [ configuration G ] 
    }
    location ~ /images/abc/ {
      # 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用
        [ configuration H ] 
    }
    location ~* /js/.*/.js

     以=开头表示精确匹配

    如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。
    ^~ 开头表示uri以某个常规字符串开头,不是正则匹配
    ~ 开头表示区分大小写的正则匹配;
    ~* 开头表示不区分大小写的正则匹配
    / 通用匹配, 如果没有其它匹配,任何请求都会匹配到

    顺序不等于优先级:

    (location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)

    实际使用建议

    所以实际使用中,个人觉得至少有三个匹配规则定义,如下:

    #直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
    #这里是直接转发给后端应用服务器了,也可以是一个静态首页
    # 第一个必选规则
    location = / {
        proxy_pass http://tomcat:8080/index
    }
    # 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
    # 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
    location ^~ /static/ {
        root /webroot/static/;
    }
    location ~* .(gif|jpg|jpeg|png|css|js|ico)$ {
        root /webroot/res/;
    }
    # 第三个规则就是通用规则,用来转发动态请求到后端应用服务器
    # 非静态文件请求就默认是动态请求,自己根据实际把握
    # 毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
    location / {
        proxy_pass http://tomcat:8080/
    }

    带上下文地址的动静态分离

    上下文地址:http://baoxian.itaiping.com/cooper

    动态资源:/cooper/navi.action/cooper/at-index.action

    静态资源:/cooper/at-content/css/common.css

    # 静态资源配置
    location ~* .(htm|html|gif|jpg|jpeg|png|bmp|ico|rar|css|js|zip|java|jar|txt|flv|swf|txt|wma|pdf)$ {    root /tpdata/nginx-data/webroot/mall; } # 动态资源配置 location ~* /cooper/ {    access_log /tpdata/nginx-data/logs/cooper.access.log main;    proxy_pass http://autotest-servers;    proxy_redirect off;    proxy_set_header Host $host;    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }

    以上注意顺序!



  • 相关阅读:
    DOS net use
    DOS cscript
    DOS bcp
    DOS ftp
    java 锁机制(synchronized 与 Lock)
    java-过滤器(Filter)
    java collection集合
    java Map集合对比分析
    java反射与注解结合使用(根据传入对象输出查询sql)
    java反射-使用反射来操纵方法
  • 原文地址:https://www.cnblogs.com/xiluhua/p/7473290.html
Copyright © 2011-2022 走看看