Nginx-10 location指令详解

本文详细介绍了Nginx的HTTP配置,特别是location区段的配置和匹配规则。location根据URI处理不同请求,匹配顺序为:= > ^~ > ~|~*|!~|!~* > /。配置示例中展示了精确匹配、正则匹配和内部服务跳转等用法,强调了匹配顺序和目录大小写敏感性的重要性。
摘要由CSDN通过智能技术生成

Nginx 的 HTTP 配置主要包括三个区块,结构如下:

 

http {                      # 这个是协议级别
  include mime.types;
  default_type application/octet-stream;
  keepalive_timeout 65;
  gzip on;
    server {             # 这个是服务器级别
      listen 80;
      server_name localhost;
        location / {  # 这个是请求级别
          root html;
          index index.html index.htm;
        }
      }
}

一、location 区段

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

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

  • 基本语法如下:

    location [=|~|~*|^~|@] pattern{……}
    

    二、location 前缀含义

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

    查找顺序和优先级

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

三、location 配置示例

1、没有修饰符 表示:必须以指定模式开始

 

server {
    listen       80;
    server_name  localhost;

    location  /abc {
        root    /home/www/nginx;
        index   2.html;
        }

那么,如下是对的:
http://192.168.1.9/abc

2、=表示:必须与指定的模式精确匹配

 

server {
    listen       80;
    server_name  localhost;
    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;
    }
}

测试:
http://192.168.1.9
=/
http://192.168.1.9/a.html
/

3、~ 表示:指定的正则表达式要区分大小写

 

server {
server_name localhost;
  location ~ /abc {
                root /home/www/nginx;
                index 2.html index.html;
        }
}
测试访问:
http://192.168.1.9/abc
不正确的
http://192.168.1.9/ABC
========================================
如果将配置文件修改为
      location ~ /ABC {
            root /home/www/nginx;
            index 2.html index.html;
        }
在创建目录和文件:
[root@ansible-server html]# cd /home/www/nginx/
[root@ansible-server nginx]# mkdir ABC
[root@ansible-server nginx]# vim ABC/2.html
 访问:
 http://192.168.1.9/ABC/
 
 结论:~ 需要区分大小写。而且目录需要根据大小写定义。

4、^~ :类似于无修饰符的行为,也是以指定模式开始,不同的是,如果模式匹配,那么就停止搜索其他模式了。
5、@ :定义命名 location 区段,这些区段客户段不能访问,只可以由内部产生的请求来访问,如error_page等

 

location 区段匹配示例

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



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值