在 /usr/local/nginx/conf/nginx.conf 的 server 段中,location 表示根据 URI 来进行不同的定位:把网站的不同部分定位到不同的处理方式上,例如遇到 .php 文件如何调用 PHP 解释器。

location 语法:

location [=|~|~*|^~] /uri/ { … }

location 类型分为:

location = patt {}[精准匹配]

location patt {}[一般匹配]

location = ~patt {}[正则匹配]

精准匹配

匹配时首先看有没有精准匹配,如果有,则停止匹配过程:

location = patt {

  config A

}

如果 $uri == patt ,匹配成功,使用 config A。

【例 step 1】

注释掉 /usr/local/nginx/conf/nginx.conf 中之前配置的 server 信息,在默认的 server 段中进行编辑,此时访问 192.168.254.100,显示

此时 server 段中 location 的配置为:

        location / {
root html;
index index.html index.htm;
}

此时,访问 192.168.254.100 实际访问的目录是:/usr/local/nginx/html/index.html

注意:root 中的 html 的绝对路径是 /usr/local/nginx/html,该目录下只有一个 index.html 文件

【例 step 2】

此时在一般匹配 location / 的上文中添加一段精准匹配(优先匹配精准匹配,一旦匹配则立即停止匹配过程),此时的 location 信息为:

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

为了以示区别,精准匹配的目录设置为 /var/www,该目录下只有一个文件 index.htm:i'm /var/www/index.htm

平滑重启 nginx

访问 http://192.168.254.100/,仍然显示

原因是:当输入 192.168.254.100 这个 ip 时,实际上是访问一个文件,通过精准匹配找到该文件是 index.html,也就是说访问 192.168.254.100 即访问 192.168.254.100/index.html,此时只能通过一般匹配访问 html(绝对路径为 /usr/local/nginx/html)下的 index.html ,这就解释了为什么会出现 Welcome to nginx 的页面。

【例 step 3】

但是一旦把精准匹配的 index.html 和 index.htm 调换位置:

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

  

访问 http://192.168.254.100/,则会出现 404 Not Found:

查看 /usr/local/nginx/logs/error.log:

提示 /usr/local/nginx/html/index.htm 找不到

【例 step 4】

修改精准匹配的 location,此时的 location 信息为:

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

平滑重启 nginx,访问 http://192.168.254.100/index.htm,显示 i'm /var/www/index.htm

说明发生了精准匹配,匹配到了文件 /var/www/index.htm

【例 step 5】

修改普通匹配的 location,此时的 location 信息为:

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

平滑重启 nginx,访问 http://192.168.254.100/index.htm,显示 i'm /var/www/index.htm:

说明精确匹配优先于普通匹配。

【例 step 6】

此时直接访问 http://192.168.254.100/,即既不精确匹配,也不普通匹配,访问的实际页面是 /usr/local/nginx/html/index.html:

【例 step 7】

添加一条 location 配置信息(第 2 条),此时的 location 配置信息为:

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

此时访问 http://192.168.254.100/,则会命中第 2 条精准匹配,显示:i'm /var/www/index.htm  

参考:

Linux nginx 配置 location 语法 正则表达式

解决Nginx服务器中403 forbidden的错误

Nginx 笔记与总结(6)Location:精准匹配的更多相关文章

  1. Nginx location规则匹配

    ^~   标识符匹配后面跟-一个字符串.匹配字符串后将停止对后续的正则表达式进行匹配,如location ^~ /images/ , 在匹配了/images/这个字符串后就停止对后续的正则匹配 = 精 ...

  2. 06 nginx Location详解之精准匹配

    一:Location详解之精准匹配 location 语法 location 有”定位”的意思, 根据Uri来进行不同的定位. 在虚拟主机的配置中,是必不可少的,location可以把网站的不同部分, ...

  3. Nginx 笔记与总结(7)Location:正则匹配

    在 /usr/local/nginx/conf/nginx.conf 的默认 server 段中,保留默认的 location 信息(之前测试的 location 配置删除): location / ...

  4. Nginx 笔记与总结(8)Location:归纳总结

    首先对 URI 进行精准匹配,如果匹配上则退出匹配,返回精准匹配结果: 如果没有匹配上则寻找普通匹配,如果命中多个普通匹配,则记忆最长的匹配结果(不考虑 location 的顺序): 如果后面还有正则 ...

  5. nginx之location的匹配规则

    nginx之location的匹配规则 一.语法规则 location [=|~|~*|^~] /uri/ { - } 符号 含义 = 开头表示精确匹配 ^~ 开头表示 uri 以某个常规字符串开头 ...

  6. 前端开发掌握nginx常用功能之server&location匹配规则

    nginx主要是公司运维同学必须掌握的知识,涉及到反向代理.负载均衡等服务器配置.前端开发尤其是纯前端开发来说对nginx接触的并不多,但是在一些情况下,nginx还是需要前端自己来搞:例如我们公司的 ...

  7. nginx多虚拟主机优先级location匹配规则及tryfiles的使用

    nginx多虚拟主机优先级location匹配规则及tryfiles的使用 .相同server_name多个虚拟主机优先级访问 .location匹配优先级 .try_files使用 .nginx的a ...

  8. nginx location 正则匹配

    nginx 统计语句1.根据访问IP统计UV awk '{print $1}' access.log|sort | uniq -c |wc -l2.统计访问URL统计PV awk '{print $7 ...

  9. Nginx 关于 location 的匹配规则详解

    有些童鞋的误区 1. location 的匹配顺序是“先匹配正则,再匹配普通”. 矫正: location 的匹配顺序其实是“先匹配普通,再匹配正则”.我这么说,大家一定会反驳我,因为按“先匹配普通, ...

随机推荐

  1. Linux配置SSH公钥认证与Jenkins远程登录进行自动发布

    公钥认证,是使用一对加密字符串,一个称为公钥(public key), 任何人都可以看到其内容,用于加密:另一个称为密钥(private key),只有拥有者才能看到,用于解密. 在使用jenkins ...

  2. yum_rpm(利用dvd建立本地yum库)

    #wget "http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os" 建立起了index.html ...

  3. 一、HTML和CSS基础--HTML+CSS基础课程--第3部分

    第五章 CSS样式基本知识 内联式css样式,直接写在现有的HTML标签中
CSS样式可以写在哪些地方呢?从CSS 样式代码插入的形式来看基本可以分为以下3种:内联式.嵌入式和外部式三种. 内联式cs ...

  4. jQuery 知识点积累

    1.判断checkbox是否选中   $("#aa").prop("checked")==true2.给属性赋值   $("#aa").pr ...

  5. android:layout_weight属性详解(转)

    在android开发中LinearLayout很常用,LinearLayout的内控件的android:layout_weight在某些场景显得非常重要,比如我们需要按比例显示.android并没用提 ...

  6. 手持PDA智能条码扫描RFID打印POS机

    手持PDA智能条码扫描RFID打印POS机   一.系统稳定性: 1.硬件稳定性: 采用了华为海思(国内唯一可以媲美全球顶级的CPU+射频方案厂商,可以和英伟达等一决高下)手机方案,CPU+射频浑然一 ...

  7. 暴力枚举 UVA 725 Division

    题目传送门 /* 暴力:对于每一个数都判断,是否数字全都使用过一遍 */ #include <cstdio> #include <iostream> #include < ...

  8. POJ3764 The xor-longest Path(Trie树)

    题目给一棵有边权的树,问树上任意两点路径上的边异或值最多是多少. 记录每个点u到根路径的异或值xor[u],那么任意两点u.v路径的异或值就是xor[u]^xor[v]. 于是这个问题就变成了从n个数 ...

  9. cocos2d 消息映射

    alayer #include "ALayer.hpp" ALayer::ALayer(void) { } ALayer::~ALayer(void) { } bool ALaye ...

  10. storm源码之一个class解决nimbus单点问题【转】

    本文导读: storm nimbus 单节点问题概述 storm与解决nimbus单点相关的概念 nimbus目前无法做到多节点的原因 解决nimbus单点问题的关键 业界对nimbus单点问题的努力 ...