nginx location优先级详解

nginx中location有几种:

1.前缀,可以有=或^~修饰,比如

location  /       /开头的

location /img/     /img/开头的

location = /a.htm      刚好/a.htm

location ^~ /d    匹配后不再检查正则表达式location。注意这个意思不是非正则表达式!除了~开头其他都是非正则表达式,也就是前缀匹配

2.正则表达式,固定~或~*(不区分大小写)开头,比如:

location ~  \.html$

location ~*  \.gif$

同时有多个location时,优先级如下:

1.Test the URI against all prefix strings.

和所有前缀比较

2.The = (equals sign) modifier defines an exact match of the URI and a prefix string. If the exact match is found, the search stops.

某个匹配前缀有=,则结束匹配

3.If the ^~ (caret-tilde) modifier prepends the longest matching prefix string, the regular expressions are not checked.

最长匹配的有 ^~ 则结束匹配

4.Store the longest matching prefix string.

保存最长匹配

5.Test the URI against regular expressions.

再检查 ~开头的正则表达式

6.Break on the first matching regular expression and use the corresponding location.

第一个匹配的正则表达式,结束匹配

7.If no regular expression matches, use the location corresponding to the stored prefix string.

没有正则匹配,则使用刚才最长前缀

所以,nginx的location中,~开头的正则表达式配置顺序会影响效果,而非~开头的前缀匹配则和配置顺序完全无关。

建议按如下顺叙写配置文件:

# =开头的精确前缀匹配优先最高

location = /a.html{}

#  ^~开头的,禁止再匹配正则的前缀匹配

location ^~  /img{}

#但是这里注意 ,如果后面有 location /img/abc{},且能匹配,那么上面这条无法匹配

#所以建议一旦一个前缀以^~开头,则其下的前缀配置也都用^~

# 正则表达式,注意这部分需要考虑配置顺序

location ~  \.*.htm$ {}    #/a/b.htm匹配这个而不是下面的,仅仅因为这行在前

location ~  ^\/a {}

# 其他非 ^~ 与=开头的前缀匹配,虽然顺序无关,但建议把长的放前面

location  /abc/df {}

#最后匹配的

location  / {}

这样检查配置时,从上往下,匹配了,就不用看后面的了

时间: 2024-10-09 17:49:11

nginx location优先级详解的相关文章

nginx location指令详解

来源:https://www.cnblogs.com/xiaoliangup/p/9175932.html Nginx的HTTP配置主要包括三个区块,结构如下: http { //这个是协议级别 include mime.types; default_type application/octet-stream; keepalive_timeout 65; gzip on; server { //这个是服务器级别 listen 80; server_name localhost; location

nginx location 配置详解

指令作用 匹配指定的请求uri(请求uri不包含查询字符串,如http://localhost:8080/test?id=10,请求uri是/test) 语法形式 location [ = | ~ | ~* | ^~ | @] /uri/ { configuration } 匹配模式及顺序 匹配字符串分为两种:普通字符串(literal string)和正则表达式(regular expression),其中 ~ 和 ~* 用于正则表达式, 其他前缀和无任何前缀都用于普通字符串. 1.先匹配普通

Nginx 核心配置详解

目录 Nginx 核心配置详解 Nginx 四层访问控制: Nginx账户认证功能: 自定义错误页面: 自定义访问日志: 检测文件是否存在: 长连接配置: 作为下载服务器配置: 作为上传服务器: 其他配置: Nginx 核心配置详解 Nginx 四层访问控制: 准备两个客户端,做访问测试使用. centos7 IP:192.168.39.7 centos6 IP:192.168.39.6 [[email protected] images1]#vim /apps/nginx/conf/conf.

Nginx配置文件nginx.conf中文详解(转)

######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] error_log /usr/local/nginx/logs/error.log info; #进程pid文件 pid /usr/local/nginx

Nginx配置文件优化详解

Nginx配置文件优化详解 对nginx进行优化是重点也是难点,这里给出一些常用的优化措施,以及相关参数的所代表的意思.有些参数需要结合公司服务器进行设置. 全局变量的优化: #定义Nginx运行的用户和用户组user  www  www: #启动进程,通常设置成和cpu的数量相等 worker_processes  8: #为每个进程分配cpu. worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 

快速部署Python应用:Nginx+uWSGI配置详解

快速部署Python应用:Nginx+uWSGI配置详解 相比于PHP,Python应用的部署很麻烦,比较常用的方法有fcgi与wsgi,然而这两种都很让人头痛.文章介绍了Nginx+uwsgi的简便方法,来快速的部署Python应用. AD: 在PHP里,最方便的就是deployment了,只要把php文件丢到支持PHP的路径里面,然后访问那个路径就能使用了:无论给主机添加多少PHP应用,只要把目录改好就没你的事了,完全不用关心php-cgi运行得如何,deployment极为方便. 反观Py

Nginx配置文件nginx.conf中文详解(转载)

请参考:http://wiki.nginx.org/Main #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; #全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] error_log ar/loginx/error.log info; #进程文件 pid ar/runinx.pid; #一个nginx进程打开的最多文件描述符

nginx学习三 nginx配置项解析详解及代码实现

nginx配置项解析详解及代码实现 0回顾 在上一节,用nginx简单实现了一个hello world程序:当我们在浏览器中输入lochost/hello ,浏览器就返回:hello world.为什么会这样呢,简单一点说就是当我们请求访问hello这个服务,nginx就会看配置文件中是否有,如果有,根据具体的handler处理后把处理的结果返回给用户,没有就返回not found. location /hello { test_hello ;//无参数的配置 这其实是一个简单的配置.这节我们来

Nginx 安装与详解

nginx简介 nginx是一个开源的,支持高性能,高并发的www服务和代理服务软件.它是一个俄罗斯人lgor sysoev开发的,作者将源代码开源出来供全球使用.nginx比它大哥apache性能改进许多,nginx占用的系统资源更少,支持更高的并发连接,有更高的访问效率.nginx不但是一个优秀的web服务软件,还可以作为反向代理,负载均衡,以及缓存服务使用.安装更为简单,方便,灵活. 优点 支持高并发,能支持几万并发连接 资源消耗少,在3万并发连接下开启10个nginx线程消耗的内存不到2