Nginx实践:(2) Nginx语法之localtion

摘要:
位置可以根据不同的处理方法定位网站的不同部分。示例1://如果$uri==pat,则匹配成功。使用configAlocation=pat{configA}示例2:location=/{root/var/www/html/;indexindex.htmindex.html;}位置/{root/usr/local/nginx/html;indexindex.htmlindex.htm;}如果您访问http://ip:port/,定位过程如下:a)精确匹配“=/”以获得索引页作为索引。htm;b) 访问/索引。再次单击。这个内部跳转已经是“/index.htm”,其根目录是/usr/local/nginx/html;c) 最终结果是/usr/local/nginx/html/index.htm。

1. 概念

location是根据uri进行不同的定位。在虚拟主机的配置中,是必不可少的。location可以将网站的不同部分,定位到不同的处理方式上。

location语法格式如下:

location [=|~|~*|^~] patt{

}

其中:

(1) 当[]中的内容均不填写时,表示一般匹配

(2) "="表示精准匹配

(3) "~"表示正则匹配 

2. 精确匹配

当uri匹配时,首先检测是否存在精准匹配,如果存在,则停止匹配过程。

例1:

// 如果$uri==patt,则匹配成功,使用config A
location = patt {
    config A
}

 例2:

location = / {
    root /var/www/html/;
    index index.htm index.html;  
}

location / {
    root /usr/local/nginx/html;
    index index.html index.htm;
}

 如果访问http://ip:port/,则其定位流程是:a) 精准匹配" = /",得到index页为index.htm; b) 再次访问/index.htm,此次内部跳转已经是"/index.htm"(一般匹配),其根目录为/usr/local/nginx/html; c) 最终结果,访问了/usr/local/nginx/html/index.htm

3. 正则匹配 

location / {
    root   /usr/local/nginx/html;
    index  index.html index.htm;
}

location ~ image {
    root /var/www/;
    index index.html;
}

 假设服务器存在/usr/local/nginx/html/image/1.jpg路径,当我们访问http://xx.com/image/1.jpg时,此时"/"与"/image/1,jpg"匹配,同时 "image"正则与"image/1.jpg"也能够匹配,二者谁会发挥作用?答案是二者均会起作用,但是最终起作用的是正则表达式,正则表达式会将之前匹配的覆盖掉,因此图片真正访问/var/www/image/1.jpg。

 4. 一般匹配

location /{
    root /usr/local/nginx/html;
    index index.html index.htm;
}

location /foo {
    root /var/www/html/;
    index index.html;
}

 当访问http://xxx.com/foo时,对于uri "/foo",两个location的patt都能匹配他们。即"/"能从左前缀匹配'/foo','/foo'也能左前缀匹配'/foo',此时真正访问的是'/var/www/html/index.html',原因是'/foo'匹配的更长,优先进行匹配。

5. location命中匹配过程

(1) 首先判断精准命中,如果命中,立即返回结果并结束解析过程

(2) 判断普通命中,如果有多个命中,"记录"下来"最长"的命中结果(注意:记录但不结束,最长的为准)

(3) 继续判断正则表达式的解析结果,按配置中的正则表达式顺序为准,由上到下开始匹配,一旦匹配成功一个,立即返回结果,并结束解析过程

延伸分析:a: 普通命中顺序无所谓,是因为按命中的长短来确定的 b: 正则命中,顺序有所谓,是因为从前往后命中的

Nginx实践:(2) Nginx语法之localtion第1张

免责声明:文章转载自《Nginx实践:(2) Nginx语法之localtion》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇zookeeper(二):linux centos下安装zookeeper(单机和集群)Java:将数据库数据导出到Excel (一眼就看会)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【nginx】大文件下载

nginx自带文件读取功能,而且实现地很好。 比如直接读取txt文件,png图片等,用chrome可以直接获取到内容。 但是对于很大的文件,比如有2个G的视频,nginx如何吐出2G的内容呢? 实验: 准备很大的MP4文件(比如2G),nginx搭建好webserver,nginx开启access_log选项(log中要包含下载文件大小,http code...

kubernetes 1.21 部署 ingressnginx

https://kubernetes.github.io/ingress-nginx/deploy/baremetal/https://docs.k0sproject.io/v1.22.2+k0s.1/examples/nginx-ingress/ 一. 部署 # 使用 baremetal curl -k https://raw.fastgit.org/...

nginx 配置以及常用命令

windows下安装以及配置nginx http://jingyan.baidu.com/article/f3e34a12a9c1c3f5eb6535d4.html 1)下载地址: http://nginx.org 2)启动 解压至c: ginx,运行nginx.exe(即nginx -c conf ginx.conf),默认使用80端口,日志见文件夹C:...

04: gitlab安装与使用

1.1 gitlab安装(192.168.56.12中安装)   1、GitLab是什么?       1. GitLab实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。       2. GitLab拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。       3. 可以管理团队对仓库的访问,它非常易于浏览提交...

Nginx作为静态web服务器——缓存原理

浏览器缓存 ​ 客户端无缓存的情况下 ​ 客户端有缓存的情况下 ​ 校验过期机制 ​ 本地客户端会检查Cache-Control(max-age)缓存是否过期,(max-age)为过期时间 Last-Modified 上次修改时间 配合If-Modified-Since或者If-Unmodified-Since使用 对比上次修改时间验证资源是否需要更...

使用nginx-prometheus-exporter 监控nginx

因为nginx 已经提供了stub_status 模块,一般我们可以基于此进行监控,目前官方提供了一个exporter 尽管有一些限制(web必须使用8080)。以下是一个简单的学习使用 环境准备 docker-compose 文件 注意使用了ranadeeppolavarapu 提供的nginx 镜像(很方便,可以学习各种nginx 插件的使用)...