首页 > 系统相关 >nginx location配置的优先级

nginx location配置的优先级

时间:2023-04-14 10:02:39浏览次数:56  
标签:优先级 nginx 正则 location images 匹配 configuration config


      

location正则写法


location  = / {
  # 精确匹配 / ,主机名后面不能带任何字符串
  [ configuration A ]
}
location  / {
  # 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
  # 但是正则和最长字符串会优先匹配
  [ configuration B ]
}
location /documents/ {
  # 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
  # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
  [ configuration C ]
}
location ~ /documents/Abc {
  # 匹配任何以 /documents/Abc 开头的地址,匹配符合以后,还要继续往下搜索
  # 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
  [ 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写法,以下的匹配示例成立
/ -> config A 精确完全匹配,即使/index.html也匹配不了
/downloads/download.html -> config B
匹配B以后,往下没有任何匹配,采用B
/images/1.gif -> configuration D
匹配到F,往下匹配到D,停止往下
/images/abc/def -> config D
最长匹配到G,往下匹配D,停止往下
你可以看到 任何以/images/开头的都会匹配到D并停止,FG写在这里是没有任何意义的,H是永远轮不到 的,这里只是为了说明匹配顺序
/documents/document.html -> config C
匹配到C,往下没有任何匹配,采用C
/documents/1.jpg -> configuration E
匹配到C,往下正则匹配到E
/documents/Abc.jpg -> config CC
最长匹配到C,往下正则顺序匹配到CC,不会往下到E

实际使用建议



所以实际使用中,个人觉得至少有三个匹配规则定义,如下:
#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
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://tengine.taobao.org/book/chapter_02.html
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html


标签:优先级,nginx,正则,location,images,匹配,configuration,config
From: https://blog.51cto.com/u_6186189/6189413

相关文章

  • docker启动nginx
    1》首先需要随便启动个nginx容器并进入容器,把nginx的配置项(conf、html、log)拷贝到服务器。命令如下:#htmldockercp容器id:/usr/share/nginx/html服务器路径#logsdockercp容器id:/var/log/nginx服务器路径#confdockercp容器id:/etc/nginx服务器路径注意:配置......
  • Nginx的安装和卸载
    一.安装(centos)1,安装一些依赖包,因为nginx是通过C语言来写成的:yum-yinstallgccpcre-develzlib-developensslopenssl-devel2,下载Nginx安装包yuminstallwget&&wgethttps://nginx.org/download/nginx-1.16.1.tar.gz3,解压缩包tar-zxvfnginx-1.16.1.tar.gzn......
  • nginx报错504 Geteway Timeout的处理
    后端开发同事反馈从页面导入大数据量表格,有时候响应正常,有时候接口返回504 GetewayTimeout报错,通过查看nginx日志报错基本上都是60s左右,原因是:问了开发同事说有时候后端程序处理导入的数据然后落库操作会很慢,即程序执行时间过长,由于proxy_read_timeout参数默认60s,由于后端服......
  • docker 容器操作、应用部署、mysql,redis,nginx、迁移与备份、Dockerfile
    容器操作#启动容器dockerstart容器id#停止容器dockerstop容器id#文件拷贝先创建文件mkdir:文件夹vivimtouch:文件#容器的文件copy到宿主机上(不是在容器内部操作)dockercp容器名称:容器目录需要拷贝的文件或目录dockercp......
  • Nginx 常用配置
    一、rewrite在/usr/share/nginx/html/下创建abc.html文件[root@localhosthtml]#cat/usr/share/nginx/html/81/abc.htmlabcnginx配置如下server{listen81;server_namelocalhost;#access_log/var/log/nginx/host.access.logmain;lo......
  • 【Docker】容器操作 mysql部署 redis部署 nginx部署 迁移与备份 Dockerfile
    目录上节回顾今日内容1容器操作2应用部署2.1mysql部署2.2redis2.3nginx3迁移与备份4Dockerfile练习上节回顾#1docker启动,停止,查看状态命令 systemctlstartdockersystemctlstopdockersystemctlstatusdockerdockerinfo#查看详情systemc......
  • 微信小程序获取用户位置 getLocation
    首先在app.config.json中配置exportdefaultdefineAppConfig({pages:[],permission:{"scope.userLocation":{"desc":"你的位置信息将用于小程序位置接口的效果展示"}},})方法调用:constgetLocation=()=>{Taro.getLocation({......
  • LVS/Nginx/HAProxy原理及应用场景介绍
    负载均衡已经发展成为网络架构中的基础核心组件,消除了服务器单点故障,可以进行请求流量分流,提升冗余,保证服务器的稳定性。在开源的软件负载均衡中,应用最为广泛的有LVS、Nginx、HAProxy,甚至阿里云的SLB也是基于LVS及Nginx的。本文就来阐述下LVS、Nginx、HAProxy的工作原理及应用场景......
  • Nginx常用命令
    nginx-cfilename 设置配置文件(nginx-c/conf/nginx.conf)nginx-sreload 重新加载Nginx配置文件,然后以优雅的方式重启Nginxnginx-sreopen 重启Nginxnginx-sstop 强制停止Nginx服务nginx-squit 优雅地停止Nginx服务(即处理完所有请求后再停止服务)nginx-t 检测配置文件是......
  • Nginx负载均衡
    Nginx的五大负载均衡算法 1、轮询策略轮询方式是Nginx负载默认的方式,顾名思义,所有请求都按照时间顺序分配到不同的服务上,如果服务Down掉,可以自动剔除,如下配置后轮训10001服务和10002服务。upstreamdalaoyang-server{serverlocalhost:10001;serverloc......