nginx配置静态文件中root和alias的区别
在使用 Nginx 配置静态文件时,root
和 alias
是两个常用的指令,但它们的使用方式和作用存在一定的区别。以下是两者的详细对比:
root
指令
定义一个根目录,后续的 URI 会基于这个根目录解析。使用 root
指令时,Nginx 会将请求的 URL 路径与指定的根目录路径进行拼接。这意味着 URL 中的路径会映射到文件系统中的对应位置。
例如,假设我们有以下配置:
location /static/ {
root /var/www;
}
当收到的请求是 https://199604.com/static/image.jpg
时,Nginx 会尝试访问文件/var/www/static/image.jpg
并返回该文件。
root
会将定义的目录路径 /var/www
和用户请求的 URI /static/css/style.css
拼接起来。
这里需要注意的是,root
指令会将匹配的 URL 路径直接映射到文件系统中的相对路径,而不是将请求 URL 中的路径添加到指定的根目录路径后。
alias
指令
定义一个别名,将请求的 URI 映射到指定的路径。与 root
不同,alias
指令允许我们在返回文件时,重写 URL 路径的部分或全部。这对于需要在返回文件时修改 URL 路径的情况非常有用。
例如,假设我们有以下配置:
location /static/ {
alias /var/www/;
}
当收到的请求是 https://199604.com/static/image.jpg
时,Nginx 会查找文件系统中的 /var/www/image.jpg
并返回该文件。即当请求 URL /static/css/image.jpg
,Nginx 会尝试访问文件 /var/www/image.jpg
。
注意:
alias
路径通常要以/
结尾,以避免路径拼接出错。
alias
和root
不可混用。如果需要切换,请确保配置一致性。
root 和 alias 的主要区别
特性 | root |
alias |
---|---|---|
路径拼接规则 | 会将 root 路径和请求 URI 拼接 |
替换 location 指定部分 |
配置灵活性 | 配置简单,适合直接映射路径的场景 | 更灵活,适用于路径重定向或改写场景 |
示例路径 | /var/www/html/static/css/style.css |
/var/www/static_files/css/style.css |
一个完整的简单配置
server {
listen 80 ;
server_name localhost;
##增城默认前端资源访问
location / {
autoindex off;
root /AppHome/nginx/html/zcct;
absolute_redirect off ;
index index.html index.htm;
access_log /var/log/nginx/zcct_access.log;
# 2022-10-12 add
}
##汕头前端资源访问;
location /shantou {
autoindex off;
alias /AppHome/nginx/html/shantou;
try_files $uri $uri/ /shantou/index.html;
index index.html index.htm;
access_log /var/log/nginx/shantou_access.log ;
}
}
autoindex off
:关闭目录索引功能。如果请求的路径没有指定具体文件(如 /example/
),且该目录下没有默认的 index.html
文件,Nginx 不会列出目录内容。
absolute_redirect off
:
- 禁用绝对重定向。当使用
try_files
或index
时,Nginx 不会生成带主机名的绝对重定向 URL。
try_files $uri $uri/ /shantou/index.html;
:
try_files
用于处理请求路径:
- 首先检查请求的文件
$uri
是否存在。 - 如果
$uri
是一个目录,则检查是否存在$uri/
。 - 如果前两步都无法找到对应的文件或目录,则返回
/shantou/index.html
。
这个配置适合用于单页应用(如 Vue、React 等),因为单页应用的所有路由都会回退到 index.html
。
参考
1.https://www.cnblogs.com/benjieqiang/p/17535499.html
以前我常常分不清try_files和alias
我也一样。所以还是gpt靠谱,不知道直接问。