Nginx由内核和模块组成,其中内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端的请求映射到一个location block,而location是Nginx配置中的一个指令,用于访问的URL匹配,而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。

  默认Nginx.conf配置文件中至少存在一个location /,即表示客户端浏览器请求的URL为:域名+/,如果location /newindex/,则表示客户端浏览器请求的URL为:域名+/newindex/。常见Location匹配URL的方式如下:

=                           字面精确匹配;

^~                          最大前缀匹配;

/                           不带任何前缀:最大前缀匹配;

~                           大小写相关的正则匹配;

~*                          大小写无关的正则匹配;

@                           location内部重定向的变量。

  其中Location =、^~、/属于普通字符串匹配,Location ~、~*属于正则表达式匹配,Location优先级与其在Nginx.conf配置文件中的先后顺序无关。

  Location = 精确匹配会第一个被处理,如果发现精确匹配,Nginx则停止搜索其他任何Location的匹配。

  普通字符匹配,正则表达式规则和完整URL规则将被优先和查询匹配,^~为最大前缀匹配,如果匹配到该规则,Nginx则停止搜索其他任何Location的匹配,否则nginx会继续处理其他location指令。

  正则匹配"~"和"~*",如果找到相应的匹配,则Nginx停止搜索其他任何Location的匹配;当没有正则表达式或者没有正则表达式被匹配的情况下,那么匹配程度最高的逐字匹配指令会被使用。

Location规则匹配优先级总结如下:

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

Location 案例演示

添加echo-nginx-module模块支持在配置文件中使用echo、sleep、time及exec等类似shell命令

#下载echo模块

wget https://github.com/openresty/echo-nginx-module/archive/v0.61.tar.gz

#重新预编译、编译、安装Nginx

[root@localhost nginx-1.14.0]# ./configure --add-module=../echo-nginx-module-0.61/

[root@localhost nginx-1.14.0]# make && make install

[root@localhost nginx-1.14.0]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.14.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
configure arguments: --add-module=../echo-nginx-module-0.61/

--------------------------------------------------------------------------------------------------

Location案例

(1)Location = 精确匹配会第一个被处理,如果发现精确匹配,Nginx则停止搜索其它任何Location的匹配。增加配置如下:

server {

省略...

location / {

echo 'test1';

}

location =  / {

echo 'test2';

}

省略...

}

[root@localhost nginx]# curl 10.0.0.12
test2

增加匹配 /index.html

  location = /index.html {

    echo 'test3';

}

[root@localhost nginx]# curl 10.0.0.12/index.html
test3
[root@localhost nginx]# curl 10.0.0.12
test2
[root@localhost nginx]# curl 10.0.0.12/test.html
test1

默认“/”解释:“/”匹配任何请求,因为所有请求都是以“/”开始;但是更长字符匹配或者正则表达式匹配会优先匹配,“/”优先级最低。

注:在这个案例中我们访问精确匹配必须是和配置文件规定的完全匹配才会匹配到对应的内容,如果没有匹配到任何的精确匹配则会交给 / 匹配。

--------------

(2)测试目录匹配,有两种配置模式,,目录匹配或前缀匹配,任选其一或搭配使用。

=  #字面精确匹配;

  location = /images/ {

    echo 'test4';

  }

[root@localhost nginx]# curl 10.0.0.12/images
test1

[root@localhost nginx]# curl 10.0.0.12/images/
test4

^~最大前缀匹配;域名后面匹配的目录必须是location写的参数,才能匹配到location中的文件。

  location ^~ /images/ {

    echo 'test5';

  }

[root@localhost nginx]# curl 10.0.0.12/images
test1
[root@localhost nginx]# curl 10.0.0.12/images/
test5
[root@localhost nginx]# curl 10.0.0.12/images/111
test5

注:匹配 / 后面的内容以 /images/ 开头的内容。

域名后面跟的第一个斜杠代表“/”,第二个斜杠就代表在访问的是一个目录,第三个斜杠代表可能有两层目录。

#10.0.0.12/images 代表访问的 images 这个文件

#10.0.0.12/images/ 代表访问的 images 这个目录

(3)正则文件匹配

~ :大小写相关的正则匹配;

~*:大小写无关的正则匹配;

location ~* \.(html|txt|gif|jpg|jpeg)$ {

  echo 'test6';

}

location ~ \.(html|txt|gif|jpg|jpeg)$ {

  echo 'test7';

}

#正则匹配中“.” 号匹配的时候默认是匹配所有单个字符,加上“\”转义符号,将“.” 号转义成真正意义上的点号。

#(html|txt|gif|jpg|jpeg)表示匹配html、txt等字符。

# $ 号代表必须以对应的字符结尾。

#可以通过调整两个的顺序来测试。

[root@localhost nginx]# curl 10.0.0.12/index.html
test6
[root@localhost nginx]# curl 10.0.0.12/index.HTML
test6

注:~大小写相关匹配,规定必须和配置文件一样(配置文件写的大小写来确定)的小写或者大写才能匹配到该请求。大小写无关匹配,不论是大写还是小写都会匹配到该请求(例如:以HTML和html结尾都会匹配到test7)

(4)基础正则匹配

location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$

 .号:匹配任意单个字符;

 *号:匹配前面的字符任意次。

#这个正则匹配的任意字符开头的以gif|jpg|jpeg|bmp|png|ico|txt|js|css这些文件结尾的后缀名,才能匹配这个规则。

Nginx Location规则的更多相关文章

  1. Nginx location规则匹配

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

  2. nginx location 路由的几个配置纪要

    1:网上没有查到在线测试 nginx location 规则的网址 在服务器上可以通过 return 返回测试比如  把#号去掉 # location /admin\.php(.*) # { #def ...

  3. 详细解析 nginx uri 如何匹配 location 规则

    location 是 nginx 配置中出现最频繁的配置项,一个 uri 是如何与多个 location 进行匹配的? 在有多个 location 都匹配的情况下,如何决定使用哪一个 location ...

  4. nginx 反向代理 配置 https 实现http https同时存在 经测试 支持location 规则

    server { listen ssl; #监听443端口 server_name www.app01.com; ssl on; #启用ssl加密 ssl_certificate /etc/cert/ ...

  5. nginx里面的location 规则匹配

    nginx location语法 ~ # 区分大小写的正则匹配 location ~ \.(gif|jpg|png|js|css)$ { #规则D } ~* # 不区分大小写的正则匹配(和~的功能相同 ...

  6. 附001.Nginx location语法规则

    一 location规则 1.1 location语法 基本语法: location [=|~|~*|^~]/uri/{...} 修饰符释义: 1 = #表示精确严格匹配,只有请求的url路径与后面的 ...

  7. Nginx location 匹配顺序整理

    Nginx location模块整理 具体的Nginx安装就不在这里描述了,这里只是为了对location的描述 Nginx环境 a. 查看当前系统cat /etc/redhat-release [r ...

  8. Nginx Location配置总结

    Nginx Location配置总结 语法规则: location [=|~|~*|^~] /uri/ { - }= 开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即 ...

  9. nginx location语法使用说明

    语法规则: location [=|~|~*|^~] /uri/ { … } = 开头表示精确匹配 ^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可.nginx不对url做编码,因 ...

随机推荐

  1. layui数据加载中遮罩层的实现

    1.load方法提供三种风格供选择. 方法一:loadIndex = layer.load(); //不传参,默认0 方法二:loadIndex = layer.load(1); // 1,另外一种风 ...

  2. DeepFaceLab: 可视化交互式合成功能简介!

    DeepFaceLab在沉寂了几个月后(目测Iperov同志讨生活去了),在8月下旬又迎来了重大更新.我总结了一下,主要是更新了三大功能. 新增Avatar模型 交互式转换器 半脸模型支持FAN ​ ...

  3. 如何手写实现简易的Dubbo[z]

    [z]https://juejin.im/post/5ccf8dec6fb9a0321c45ebb5 前言 结束了集群容错和服务发布原理这两个小专题之后,有朋友问我服务引用什么时候开始,本篇为服务引用 ...

  4. robotFramework——FOR循环语句

    robotframework支持FOR循环语句,语法和Python的语法基本相同,但robotframework中,“FOR”关键字前面需要增加一个“:”,写成“:FOR”,其它与Python的语法相 ...

  5. C# Selenium FireFox 接入阿布云

    业务需要购买http隧道,发现阿布云还行,使用Selenium本来想要用谷歌浏览器的,但是发现不能直接设置账号,所以选用火狐. 按照官方JAVA示例的改编,其中WebDriver实例化不能直接添加Fi ...

  6. 2018.04.02 matplotlib 图名,图例,轴标签,轴边界,轴刻度,轴刻度标签

    import numpy as np import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame(np.random.r ...

  7. java:IO流(处理流(缓冲流,转换流,数据流),对象的序列化,Properties)

    字节缓冲流:(BufferedInputStream,BufferedOutStream) *按照流的功能来分:节点流和处理流 *节点流可以直接操作数据源: *InputStream *--FileI ...

  8. nova计算服务

    1. nova介绍 Nova 是 OpenStack 最核心的服务,负责维护和管理云环境的计算资源.OpenStack 作为 IaaS 的云操作系统,虚拟机生命周期管理也就是通过 Nova 来实现的. ...

  9. Spring-QUARTZ定时任务demo

    Quartz定时任务demo下载: https://github.com/AliceSunCong/quartz 大致流程: **1.pom文件引入QUARTZ依赖** <dependency& ...

  10. NOIp D1T1 小凯的疑惑

    吐槽 果然让人很疑惑,这道题,对于我这种数学渣渣来说太不友好了,哪里想得到结论,猜也猜不到. 思路一 纯数学,见过的飞快切掉,没见过的就... 结论就是:已知$a,b$为大于$ 1 $的互质的正整数, ...