zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    【Win 10 应用开发】Toast通知激活应用——前台&后台
    MySQL深入理解
    mysql 索引中的USING BTREE 的意义
    关于PHP将对象数据写入日志的问题
    Golang学习笔记
    git flow 使用步骤
    git flow常用命令
    Nginx Log日志统计分析常用命令
    Nginx配置中的log_format用法梳理(设置详细的日志格式)
    回调函数的原理及PHP实例
  • 原文地址:https://www.cnblogs.com/Paul-watermelon/p/14248486.html
Copyright © 2011-2022 走看看