Nginx之Location详解

一、location区段

location 是在 server 块中配置,根据不同的 URl使用不同的配置,来处理不同的请求

location 是有顺序的,会被第一个匹配的location 处理

二、基本语法

 location [=|~|~*|^~] /uri/ {
     # 配置指令
 }

三、location前缀含义

前缀说明
=表示精确匹配,优先级也是最高的
^~表示url以某个常规字符串开头,理解为匹配url路径即可
~表示区分大小写的正则匹配
~*表示不区分大小写的正则匹配
!~表示区分大小写不匹配的正则
!~*表示不区分大小写不匹配的正则
/通用匹配,任何请求都会匹配到
@内部服务跳转

四、location配置示例

1、没有修饰符

表示必须以指定模式开始;示例使用:http://qf.com/abc

 [root@centos nginx]# pwd
 /home/www/nginx
 [root@centos nginx]# cat abc/2.html
 [root@centos nginx]# vim /etc/nginx/conf.d/default.conf
 server {
   listen 80;
   server_name qf.com;
   location /abc {
     root /home/www/nginx;
     index 2.html;
   }
 }

2、=

表示必须以指定的模式精确匹配

 server {
   listen 80;
   server_name www.testpm.cn;
   access_log /var/log/nginx/http_access.log main;
   location / {
     root /usr/share/nginx/html;
     index a.html index.htm;
   }
   location = / {
     root /usr/share/nginx/html;
     index b.html index.htm;
   }
 }

3、~

指定的正则表达式要区分大小写

 [root@nginx-server nginx]# pwd
 /home/www/nginx
 [root@nginx-server nginx]# ls
 2.html abc ABC
 [root@nginx-server nginx]# cat abc/2.html
 abc
 [root@nginx-server nginx]# cat ABC/2.html
 ABC
 server {
   server_name localhost;
   location ~ /abc {
     root /home/www/nginx;
     index 2.html index.html;
   }
 }
 那么:
 http://192.168.62.153/abc/

4、~*

指定的正则表达式不区分大小写

 server {
   server_name localhost;
   location ~* /abc {
     root /home/www/nginx;
     index 2.html index.html;
   }
 }
 那么:
 http://192.168.62.153/ABC/

5、^~

类似于无修饰符的行为,也是以指定模式开始,不同的是,如果模式匹配,那么就停止搜索其他模式了

6、@

定义命名 location 区段,这些区段客户段不能访问,只可以由内部产生的请求来访问,如try_files或error_page等

五、查找顺序和优先级

1、查找顺序

1:带有“=“的精确匹配优先

2:没有修饰符的精确匹配

3:正则表达式按照他们在配置文件中定义的顺序

4:带有“^~”修饰符的,开头匹配

5:带有“~” “~*” 修饰符的,如果正则表达式与URI匹配

6:没有修饰符的,如果指定字符串与URI开头匹配

2、优先级

 = 大于 ^~ 大于 ~|~*|!~|!~* 大于 /

多个location配置的情况下匹配顺序为:首先匹配 =,其次匹配^~, 其次是按正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求

(1) =:表示完全匹配; (2) ^~:匹配URI的前缀,并且后面的正则表达式不再匹配,如果一个URI同时满足两个规则的话,匹配最长的规则; (3) ~:匹配正则表达式,大小写敏感; (4) ~*:匹配正则表达式,大小写不敏感;

优先级:(1)> (2) > (3) = (4)

3、示例

 location = / {
 # 只匹配 / 的查询.
 [ configuration A ]
         
 }
 location / {
 # 匹配任何以 / 开始的查询,但是正则表达式与一些较长的字符串将被首先匹配。
 [ configuration B ]
 }
 ​
 location ^~ /images/ {
 # 匹配任何以 /images/ 开始的查询并且停止搜索,不检查正则表达式。
 [ configuration C ]
 }
 ​
 location ~* \.(gif|jpg|jpeg)$ {
 # 匹配任何以gif, jpg, or jpeg结尾的文件,但是所有 /images/ 目录的请求将在
 Configuration C中处理。
 [ configuration D ]
 }
 ​
 各请求的处理如下例:
 / → configuration A
 /documents/document.html → configuration B
 /images/1.gif → configuration C
 /documents/1.jpg → configuration D

六、扩展:root alias 指令区别

1、示例

若按照此配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件

 location /img/ {
     alias /var/www/image/;
 }

若按照这种配置的话,则访问/img/目录下的文件时,nginx会去/var/www/image/img/目录下找文件

 location /img/ {
     root /var/www/image;
 }

2、说明

alias 是一个目录别名的定义;root 则是最上层目录的定义;还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的,而root则可有可无

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李学不完

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值