nginx-location配置块详解程序员

location 配置块

其中 location 用于匹配请求的 URI。

URI 表示的是访问路径,除域名和协议以外的内容,比如说我访问了https://www.shiyanlou.com/louplus/linux,https:// 是协议,www.shiyanlou.com 是域名,/louplus/linux 是 URI。

location 匹配的方式有多种:

  • 精准匹配

  • 忽略大小写的正则匹配

  • 大小写敏感的正则匹配

  • 前半部分匹配

其语法如下:

location [ = | ~ | ~* | ^~ ] pattern { 
#    ...... 
#    ...... 
} 

其中各个符号的含义:

  • =:用于精准匹配,想请求的 URI 与 pattern 表达式完全匹配的时候才会执行 location 中的操作

  • ~:用于区分大小写的正则匹配;

  • ~*:用于不区分大小写的正则匹配;

  • ^~:用于匹配 URI 的前半部分;

我们以这样的实例来进一步理解:

# 当访问 www.xxx.com 时,请求访问的是 /,所以将与配置 A 匹配; 
location = / { 
    # [ 配置 A ] 
} 
# 当访问 www.xxx.com/test.html 时,请求将与配置 B 匹配; 
location / { 
    # [ 配置 B ] 
} 
# 当访问 www.xxx.com/documents/document.html 时,请求将匹配配置 C 
location /documents/ { 
    # [ 配置 C ] 
} 
# 当访问 www.xxx.com/images/1.gif 请求将匹配配置 D; 
location ^~ /images/ { 
    # [ 配置 D ] 
} 
# 当访问 www.xxx.com/docs/1.jpg 请求将匹配配置 E。 
location ~* /.(gif|jpg|jpeg)$ { 
    # [ 配置 E ] 
} 

当一个 URI 能够同时配被多 location 匹配的时候,则按顺序被第一个 location 所匹配。

在 location 中处理请求的方式有很多,如上文中的 try_files $uri $uri/ =404;,它是一种特别常用的写法。

我们来分析一下 try_files $uri $uri/ =404;。这里假设我定义的 root 为/usr/share/nginx/html/,访问的 URI 是 /hello/shiyanlou。

# 虚拟主机的配置 
server { 
    # 侦听 80 端口,分别配置了 IPv4 和 IPv6 
    listen 80 default_server; 
    listen[::]:80 default_server ipv6only=on; 
 
    # 定义服务器的默认网站根目录位置 
    root /usr/share/nginx/html; 
 
    # 定义主页的文件名 
    index index.html index.htm; 
 
    # 定义虚拟服务器的名称 
    server_name localhost; 
     
    # location 块 
    location / { 
        try_files $uri $uri/ =404; 
    } 
} 
  • 第一步:当 URI 被匹配后,会先查找/usr/share/nginx/html//hello/shiyanlou 这个文件是否存在,如果存在则返回,不存在进入下一步。

  • 第二步:查找 /usr/share/nginx/html//hello/shiyanlou/ 目录是否存在,如果存在,按 index 指定的文件名进行查找,比如 index.html,如果存在则返回,不存在就进入下一步。

  • 第三步:返回 404 Not Found。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/1716.html

(0)
上一篇 2021年7月15日
下一篇 2021年7月15日

相关推荐

发表回复

登录后才能评论