Nginx配置原理

location匹配规则

## 例如下 -----------------------------------------------------

# 静态资源(永远不走正则)
location ^~ /assets/ {
    root /var/www/app;
    expires 1y;
    access_log off;
}

# 图片、字体等
location ~* \.(png|jpg|woff2|css|js)$ {
    root /var/www/app;
    expires 30d;
}

# SPA 入口
location /web {
    root /var/www/app;
    try_files $uri $uri/ /index.html;
}


root和alise

一般推荐使用rootaliase仅用于URL与磁盘目录不对应时;

## root示例说明 ----------------------------------------------------------------
location /static/ {
    root /var/www;
}

## 访问:/static/logo.png
## 真实路径为:/var/www/static/logo.png 
## 真实路径 = root + 完整请求URI


## alias示例说明 ---------------------------------------------------------------
location /static/ {
    alias /var/www/assets/;
}

## 访问:/static/logo.png
## 真实路径为:/var/www/assets/logo.png
## 真实路径 = alias + (URI 去掉 location 前缀)
## 注:location 结尾的 / 非常重要

综上,root 是拼接路径,alias 是替换路径;

注意:

1>. 除非迫不得已,否则不要使用alias,因为 alias 在 try_files 不会自动替换路径;

2>. 一个配置中可以同时存在多个使用 root 的location配置;

try_files

try_files 的作用是 按顺序检查文件是否存在,并使用找到的第一个文件来处理请求;如果指定的所有文件都找不到,它会执行最后一个。

## 按顺序先找$uri,存在则返回,不存在则再找$uri/
## $uri/存在则返回,不存在则再找index.html;
## index.html存在则返回,不存在则返回500错误
try_files $uri $uri/ /index.html;

## 按顺序先找$uri,存在则返回,不存在则再找$uri/index.html;
## $uri/index.html存在则返回,不存在则返回404
try_files $uri $uri/index.html =404;

## 查找匹配顺序同上
## last 表示强制重新走一次 location 匹配流程(不推荐使用,容易陷入死循环)
try_files $uri $uri/ /index.html last;

注意:

1>. try_files 的最后一个参数或文件是内部重定向;如上,Nginx不会检查最后一个 /index.html 是否存在,而是直接发起一个新的“内部请求”去访问 /index.html;Nginx 带着 /index.html 这个新路径重新匹配 location 块,如果它再次匹配到了同一个 location / 块,又发现文件不存在,就会继续循环发起请求,最终内部重定向超过10次,就会停止尝试并返回500错误;

2>. $uri/index.html 和 /index.html 有巨在差异;$uri/index.html 是访问指定 $uri 目录下的 index.html 文件;/index.html是直接访问项目根目录下的 index.html;

3>. 使用 alias 时,try_files 中的 $uri 仍然代表的是请求中原始的URI,nginx不会在这里自动去替换;因此,请尽量不要使用 alias;

4>. 除非迫不得已,否则不要使用alias,一个配置中可以同时存在多个使用 root 的location配置;



举报

© 著作权归作者所有


1