Skip to content

商务合作:vTikTok


公众号:



Nginx中rewrite,location,try_files区别


在 Nginx 配置中,rewritelocationtry_files 都是非常重要的指令,它们各自有着不同的用途和特性。

  1. rewrite: 这是一个用于修改请求的 URI 的指令。它可以基于正则表达式来改变或重新定向请求的 URI,然后用指定的字符串替换匹配到的部分。这个指令通常用于重定向或者负载均衡等场景。例如:

    rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
    rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;
    return  403;
    rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
    rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra  last;
    return  403;

    在上述例子中,rewrite 指令将所有以 ".jpg" 或 ".ra" 结尾的 URI 重写为以 ".mp3" 结尾的 URI。

  2. location: 这个指令用于定义如何处理特定类型的请求。它可以匹配 URI 或 URI 的一部分,并定义这些请求应该如何处理。例如:

    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
    }
    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
    }

    在上述例子中,location 指令定义了所有来自 "/" 的请求都应该被发送到 "/usr/share/nginx/html" 目录,并且默认的索引文件是 "index.html" 或 "index.htm"。

  3. try_files: 这个指令用于按顺序检查文件是否存在,并返回第一个找到的文件。当 Nginx 找到第一个存在的文件或者目录时,就会停止查找,并使用这个文件或者目录来处理请求。这个指令通常用于静态网站,或者希望根据文件是否存在来决定处理逻辑的场景。如果所有文件都没有找到,它将执行一个内部重定向到最后一个参数。例如:

    location / {
        try_files $uri $uri/ /index.html;
    }
    location / {
        try_files $uri $uri/ /index.html;
    }

    在上述例子中,try_files 指令首先尝试查找对应于请求的 URI 的文件,如果没有找到,它将尝试查找对应于请求的 URI 的目录。如果还是没有找到,它将返回 "/index.html" 文件。

这三个指令经常一起使用,以实现复杂的请求处理逻辑。例如,你可能想要重写某些 URI,然后在特定的 location 中使用 try_files 来查找文件。

简单来说,rewrite 是用于修改请求的,location 是用于定义如何处理特定路径的请求的,而 try_files 是用于根据文件或者目录是否存在来决定如何处理请求的。这三个指令通常会一起使用,以满足各种复杂的需求。