Nginx 配置:alias 和 root 的区别
在 Nginx 的配置中,alias 和 root 是两个用于映射文件路径的重要指令。虽然它们的功能表面相似,实际使用中却有显著的差异。如果不清楚两者的用法和特点,可能会导致资源路径错误或访问异常。本文将详细解析它们的区别,并提供实用示例。
一、root 的作用
root 定义了资源的根目录,Nginx 会将 URL 中匹配的路径拼接到 root 指定的目录后,用于定位文件。
基本语法
root /path/to/root;
示例
server {location /static/ {root /var/www/html;}
}
当用户访问 /static/images/logo.png 时,Nginx 会尝试读取文件路径:
/var/www/html/static/images/logo.png
特点:
root会将匹配的location路径保留并拼接到指定的根目录路径后。- 使用场景:简单的静态文件目录映射。
二、alias 的作用
alias 用于替换匹配的路径,与 root 不同,alias 不会拼接 location 中的路径,而是直接替换整个路径。
基本语法
alias /path/to/alias/;
示例
server {location /static/ {alias /var/www/html/assets/;}
}
当用户访问 /static/images/logo.png 时,Nginx 会尝试读取文件路径:
/var/www/html/assets/images/logo.png
特点:
alias会替换匹配的location路径,而不是拼接。- 使用场景:特定资源目录的映射。
三、root 和 alias 的区别
对比项
root
alias
路径处理
拼接 location 匹配部分
替换 location 匹配部分
典型用法
简单的静态文件目录映射
映射到非标准目录结构
路径格式
无需以 / 结尾
必须以 / 结尾
路径定位
/root_path/location_path/request_path
/alias_path/request_path
四、常见错误与解决方法
1. 使用 alias 时忘记加 /
错误配置:
location /static/ {alias /var/www/html/assets;
}
当用户访问 /static/images/logo.png 时,Nginx 会尝试读取文件路径:
/var/www/html/assetsimages/logo.png
修正配置:
location /static/ {alias /var/www/html/assets/;
}
2. 使用 root 时误解拼接方式
错误配置:
location /static/ {root /var/www/html/assets/;
}
当用户访问 /static/images/logo.png 时,Nginx 会尝试读取文件路径:
/var/www/html/assets/static/images/logo.png
修正配置:
location /static/ {root /var/www/html;
}
五、综合示例
以下是一个完整的示例,展示 alias 和 root 的不同应用场景:
server {# 使用 root 映射静态资源location /static/ {root /var/www/html;}# 使用 alias 映射到特定目录location /media/ {alias /var/www/media/;}
}
资源路径解析:
- 访问
/static/images/logo.png->/var/www/html/static/images/logo.png - 访问
/media/videos/movie.mp4->/var/www/media/videos/movie.mp4
六、如何选择?
-
使用
root的场景:- URL 路径与文件路径结构一致。
- 需要简单的静态文件服务。
-
使用
alias的场景:- URL 路径与文件路径结构不一致。
- 需要映射到自定义目录或动态调整路径。
七、总结
alias 和 root 是 Nginx 配置中常用的两种指令,理解它们的区别对于正确配置文件路径非常重要。简单来说:
root适合简单路径拼接。alias用于路径替换。
通过正确使用它们,可以避免资源定位错误,提升服务器的配置效率和维护性。
相关文章:
Nginx 配置:alias 和 root 的区别
在 Nginx 的配置中,alias 和 root 是两个用于映射文件路径的重要指令。虽然它们的功能表面相似,实际使用中却有显著的差异。如果不清楚两者的用法和特点,可能会导致资源路径错误或访问异常。本文将详细解析它们的区别,并提供实用示…...
深入理解 QObject的作用
QObject 作为 Qt 库中所有对象的基类,其地位无可替代。几乎 Qt 框架内的每一个类,无论是负责构建用户界面的 QWidget,还是专注于数据处理与呈现的 QAbstractItemModel,均直接或间接继承自 QObject。这种继承体系赋予 Qt 类库高度的…...
在项目中调用本地Deepseek(接入本地Deepseek)
前言 之前发表的文章已经讲了如何本地部署Deepseek模型,并且如何给Deepseek模型投喂数据、搭建本地知识库,但大部分人不知道怎么应用,让自己的项目接入AI模型。 文末有彩蛋哦!!! 要接入本地部署的deepsee…...
JAVA中常用类型
一、包装类 1.1 包装类简介 java是面向对象的语言,但是八大基本数据类型不符合面向对象的特征。因此为了弥补这种缺点,为这八中基本数据类型专门设计了八中符合面向面向对象的特征的类型,这八种具有面向对象特征的类型,就叫做包…...
PostgreSQL学习的必要性
据分析师、运维工程师,还是技术决策者,掌握 PostgreSQL 都能带来显著的优势。以下是其必要性的核心要点:企业级开源数据库的首选 功能全面性:PostgreSQL 支持复杂的 SQL 查询、事务(ACID 特性)、多版本并发…...
使用 GPTQ 进行 4 位 LLM 量化
权重量化方面的最新进展使我们能够在消费级硬件上运行大量大型语言模型,例如 RTX 3090 GPU 上的 LLaMA-30B 模型。这要归功于性能下降最小的新型 4 位量化技术,例如GPTQ、GGML和NF4。 在本文中,我们将探索流行的 GPTQ 算法,以了解…...
【黑马点评优化】2-Canel实现多级缓存(Redis+Caffeine)同步
【黑马点评优化】2-Canel实现多级缓存(RedisCaffeine)同步 0 背景1 配置MySQL1.1 开启MySQL的binlog功能1.1.1 找到mysql配置文件my.ini的位置1.1.2 开启binlog 1.2 创建canal用户 2 下载配置canal2.1 canal 1.1.5下载2.2 配置canal2.3 启动canal2.4 测试…...
【CUDA】Pytorch_Extensions
【CUDA】Pytorch_Extensions 为什么要开发CUDA扩展? 当我们在PyTorch中实现自定义算子时,通常有两种选择: 使用纯Python实现(简单但效率低)使用C/CUDA扩展(高效但需要编译) 对于计算密集型的…...
CPP集群聊天服务器开发实践(五):nginx负载均衡配置
1 负载均衡器的原理与功能 单台Chatserver可以容纳大约两万台客户端同时在线聊天,为了提升并发量最直观的办法需要水平扩展服务器的数量,三台服务器可以容纳六万左右的客户端。 负载均衡器的作用: 把client的请求按照负载均衡算法分发到具体…...
使用 NVM 随意切换 Node.js 版本
安装nvm https://github.com/coreybutler/nvm-windows/releases nvm安装详细教程(卸载旧的nodejs,安装nvm、node、npm、cnpm、yarn及环境变量配置)-CSDN博客 验证 NVM 是否安装成功-查看版本 nvm --version安装指定版本的 Node.js nvm i…...
百问网(100ask)的IMX6ULL开发板的以太网控制器(MAC)与物理层(PHY)芯片(LAN8720A)连接的原理图分析(包含各引脚说明以及工作原理)
前言 本博文承接博文 https://blog.csdn.net/wenhao_ir/article/details/145663029 。 本博文和博文 https://blog.csdn.net/wenhao_ir/article/details/145663029 的目录是找出百问网(100ask)的IMX6ULL开发板与NXP官方提供的公板MCIMX6ULL-EVK(imx6ull14x14evk)在以太网硬件…...
组件库地址
react: https://react-vant.3lang.dev/components/dialoghttps://react-vant.3lang.dev/components/dialog vue用v2的 Vant 2 - Mobile UI Components built on Vue...
2025.2.16机器学习笔记:TimeGan文献阅读
2025.2.9周报 一、文献阅读题目信息摘要Abstract创新点网络架构一、嵌入函数二、恢复函数三、序列生成器四、序列判别器损失函数 实验结论后续展望 一、文献阅读 题目信息 题目: Time-series Generative Adversarial Networks会议: Neural Information…...
最新智能优化算法: 中华穿山甲优化( Chinese Pangolin Optimizer ,CPO)算法求解23个经典函数测试集,MATLAB代码
中华穿山甲优化( Chinese Pangolin Optimizer ,CPO)算法由GUO Zhiqing 等人提出,该算法的灵感来自中华穿山甲独特的狩猎行为,包括引诱和捕食行为。 算法流程如下: 1. 开始 设置算法参数和最大迭代次数&a…...
使用 DeepSeek + 语音转文字工具 实现会议整理
目录 简述 1. DeepSeek与常用的语音转文字工具 1.1 DeepSeek 1.2 讯飞听见 1.3 飞书妙记 1.4 剪映电脑版 1.5 Buzz 2. 安装Buzz 3. 使用DeepSeek Buzz提取并整理语音文字 3.1 使用 Buzz 完成语音转文字工作 3.2 使用 DeepSeek 进行文本处理工作 3.3 整理成思维导图…...
【OS安装与使用】part4-ubuntu22.04安装anaconda
文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 官网下载Anaconda(1)确认自己的系统型号与硬件架构(2)官网下载对应版本 2.2.2 安装Anaconda(1)基于shell脚本…...
把程序加入开机自启动
一、Windows 系统 方法 1:通过启动文件夹 1. 按下 Win R,输入 shell:startup,回车打开 **启动文件夹**。 2. 将应用程序的快捷方式复制到此文件夹中。 右键应用程序主程序(.exe)→ 创建快捷方式 → 拖动到启动文件夹。…...
介绍cherrypick
git cherry-pick 是 Git 中的一个强大命令,用于将一个或多个提交(commit)从一个分支应用到另一个分支。它允许你选择性地将特定的变更引入到当前分支,而无需合并整个分支。以下是对 git cherry-pick 操作的详细介绍: 1…...
Spring IoC DI:控制反转与依赖注入
目录 前言 - Spring MVC 与 Spring IoC 之间的关系 1. IoC 1.1 Spring Framework, Spring MVC, Spring boot 之间的联系[面试题] 1.2 什么是容器 1.3 什么是 IoC 2. DI 2.1 什么是 DI 3. Spring IoC & DI 3.1 Component 3.2 Autowired 4. IoC 详解 4.1 Applica…...
JavaAPI常用类型(包装类、BigDecimal类)
包装类 java语言是面向对象的语言,但是其中的八大基本数据类型不符合面向对象的特征。 因此java为了弥补这样的缺点,为这八种基本数据类型专门设计了八种符合面向对象特征的的类型,这八种具有面向对象特征的类型,统称为包装类&a…...
项目中一些不理解的问题
1.Mybatis是干啥的 他是用来帮我们操作数据库的,相当于是我们的一个助手: 我们想要得到数据库中的什么数据,就可以告诉mybatis,他会给我们想要的结果,同时,我们想要对数据库做出什么操作,也可…...
数字化转型4化:标准化奠基-信息化加速-数字化赋能-智能化引领
随着经济增速的放缓,大国体系所催生的生产力逐渐释放,后续业务的发展愈发需要精耕细作,精益理念也必须深入企业的骨髓。与此同时,在全球经济一体化的大背景下,企业面临着来自国内外同行,甚至是跨行业的激…...
Lineageos 22.1(Android 15) 开机向导制作
一、前言 开机向导原理其实就是将特定的category的Activity加入ComponentResolver,如下 <category android:name"android.intent.category.SETUP_WIZARD"/>然后我们开机启动的时候,FallbackHome结束,然后启动Launcher的时候…...
“让App玩捉迷藏:Android教育平板的‘隐身术’开发实录”
1. 前言:一场App的“消失魔术” 在定制教育平板时,客户要求:“朕要某些App在桌面上消失,只能在系统设置里当个‘幽灵’,而朕一声令下,它们又得原地复活!”于是,程序员们翻开了Androi…...
简单易懂,解析Go语言中的Channel管道
Channel 管道 1 初始化 可用var声明nil管道;用make初始化管道; len(): 缓冲区中元素个数, cap(): 缓冲区大小 //变量声明 var a chan int //使用make初始化 b : make(chan int) //不带缓冲区 c : make(chan stri…...
C++基础知识学习记录—模版和泛型编程
1、模板 概念: 模板可以让类或者函数支持一种通用类型,在编写时不指定固定的类型,在运行时才决定是什么类型,理论上讲可以支持任何类型,提高了代码的重用性。 模板可以让程序员专注于内部算法而忽略具体类型&#x…...
已解决IDEA无法输入中文问题(亲测有效)
前言 在使用IDEA的时候,比如我们想写个注释,可能不经意间,输入法就无法输入中文了,但是在其他地方打字,输入法仍然能够正常工作。这是什么原因呢,这篇文章带你解决这个问题! 快捷键 如果你的I…...
人工智能之目标追踪DeepSort源码解读(yolov5目标检测,代价矩阵,余弦相似度,马氏距离,匹配与预测更新)
要想做好目标追踪,须做好目标检测,所以这里就是基于yolov5检测基础上进行DeepSort,叫它为Yolov5_DeepSort。整体思路是先检测再追踪,基于检测结果进行预测与匹配。 一.参数与演示 这里用到的是coco预训练人的数据集: 二.针对检测结果初始化track 对每一帧数据都输出…...
Copilot基于企业PPT模板生成演示文稿
关于copilot创建PPT,咱们写过较多文章了: Copilot for PowerPoint通过文件创建PPT Copilot如何将word文稿一键转为PPT Copilot一键将PDF转为PPT,治好了我的精神内耗 测评Copilot和ChatGPT-4o从PDF创建PPT功能 Copilot for PPT全新功能&a…...
使用GDI+、文件和目录和打印API,批量将图片按文件名分组打包成PDF
代码写了两个小时,速度太慢(包括学习文档的时间) #include <stdio.h> #include <Windows.h> #include <gdiplus.h> #include <string.h> using namespace Gdiplus; #pragma comment(lib, "Gdiplus.lib") …...
