归档日期:2026-10-27;补录发布:2026-10-28。
同一个文件明明存在,浏览器却返回 404。整理 Nginx 资料时,我把 root 和 alias 单独列出来,因为两种写法看起来相似,实际拼接路径的方式不同。以下是实验示例,不代表本站启用了这些实验目录。
root:接完整 URI
location /images/ {
root /srv/nginx-lab;
}请求 /images/logo.png,会查找 /srv/nginx-lab/images/logo.png。root 不会自动去掉网址里的 /images/。
alias:替换匹配前缀
location /images/ {
alias /srv/nginx-lab/assets/;
}同样的请求会查找 /srv/nginx-lab/assets/logo.png。这个示例中两边结尾的斜杠应配套,不要随意删掉。
先算路径,再检查权限
写下“请求 URI → 命中的 location → 最终文件路径”,再检查文件:
ls -l /srv/nginx-lab/assets/logo.png
namei -l /srv/nginx-lab/assets/logo.pngnamei -l 逐层展示目录权限。文件可读但上级目录缺少进入权限,仍可能失败。若启用 SELinux,还应检查文件标签与审计信息。
location 也会影响结果
普通前缀、精确匹配与正则规则会决定请求由哪一段处理。nginx -T 可以展示加载的完整配置,但输出可能包含内部信息,分享前应检查。
404 时先核对路径和路由,403 时结合日志检查权限与访问限制,不能只凭状态码下结论,也不应直接给整个网站 chmod 777。
先在独立实验站点用文本文件验证,再考虑合并配置。保存原文件,nginx -t 成功后 reload,最后实际请求资源。配置看似差不多,多一层目录就已经是另一个文件。
添加两个明确的验收用例
在隔离环境分别请求 /images/logo.png 和 /images/missing.png:前者内容应与磁盘文件一致,后者应为 404。然后测试一个不应由该 location 服务的路径,确认兜底规则。alias 配合正则 location、try_files 或脚本执行时还有上下文规则,不能照搬普通前缀例子;静态上传目录不要意外获得 PHP 执行能力。
内容复核与修订:2026-10-29。实验示例与本站运行记录分别说明;原始归档日期保留。
评论 (0)