当前位置: 首页 > news >正文

Nginx配置优先级问题导致静态资源404

背景

网站搭建好之后,按照之前研发给的 Nginx 配置, 进行了重新部署,这方面已经在之前的文章宝塔网站配置和伪静态使用技巧中有介绍。配置完之后发现,静态资源无法访问,页面显示404。

配置内容

网站配置文件核心内容如下

server
{listen 80;listen 443 ssl http2 ;server_name example.com;index index.php index.html index.htm default.php default.htm default.html;root /www/wwwroot/html;include /www/server/panel/vhost/nginx/redirect/example.com/*.conf;location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${expires      30d;access_log  /dev/null;error_log  /dev/null;}
}

由于静态文件位于 /opt/static/ 目录下,所以需要添加一个 location 来处理静态资源的访问, 使用 alias 来映射静态资源目录, 就像这样:

location /static/ {alias /opt/static/;
}

然而,在添加了这个 location 之后,发现静态资源仍然无法访问,页面依然显示404错误。

问题分析

背景知识,首先需要了解下 Nginx 的匹配优先级:

优先级类型语法示例说明
1精确匹配location = /path只匹配完全相同的路径,优先级最高。
2前缀匹配(提升优先级)location ^~ /prefix匹配以指定前缀开头的路径,如果使用^~修饰符,则优先级高于正则匹配。
3正则匹配(区分大小写)location ~ \.png$按定义顺序匹配正则表达式(区分大小写),先定义优先。
4正则匹配(不区分大小写)location ~* \.png$按定义顺序匹配正则表达式(不区分大小写),先定义优先。
5普通前缀匹配location /static/匹配以指定前缀开头的路径,如果有多个匹配,选择最长前缀的。
6通用匹配location /匹配所有请求,优先级最低。

由此可见,由于配置了 location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$, 这个正则匹配规则会优先于普通前缀匹配规则 location /static/,因此导致增加的规则失效,要解决这个问题,需要将正则匹配规则的优先级调高。

#/static 目录映射成 /opt/static/, ^增加优先级
location ^~ /static/ {alias /opt/static/;
}

最终文件就可以正常访问了。

http://www.dtcms.com/a/309200.html

相关文章:

  • 新书速览|Python数据分析师成长之路
  • 实战指南|虚拟电厂管理平台搭建全流程解析(一)
  • 谷歌Firebase动态链接将失效:如何选择深度链接替代方案?
  • ccf接口测试实战
  • 机器学习sklearn:编码、哑变量、二值化和分段
  • Implement recovery based on PITR using dump file and binlog
  • 用离子交换树脂做镍钴分离的工艺优势
  • Solana:解决Anchor Build编译程序报错 no method named `source_file` found for struct
  • 暑期算法训练.12
  • 练习javaweb+mysql+jsp
  • 渗透测试常用指令
  • [vue3 echarts] echarts 动态数据更新 setInterval
  • winform,DataGridView单元格点击选择日期,日期控件
  • 使用 whisper, 音频分割, 整理需求 2
  • 高防服务器租用:保障数据安全
  • 【智能Agent场景实战指南 Day 29】Agent市场趋势与前沿技术
  • 法国彩虹重磅发布EmVue:解锁能源监控新方式
  • TGD第十篇:当神经网络遇到TGD特征
  • 相亲小程序个人资料管理系统模块搭建
  • 数据结构(10)栈和队列算法题
  • 25电赛e题杂乱环境稳定识别矩形框(附源码)
  • 浏览器环境segmentit实现中文分词
  • 精通分类:解析Scikit-learn中的KNN、朴素贝叶斯与决策树(含随机森林)
  • LLM Prompt与开源模型资源(2)提示工程关键技术
  • 工程化(二):为什么你的下一个项目应该使用Monorepo?(pnpm / Lerna实战)
  • 位运算-面试题01.01.判定字符是否唯一-力扣(LeetCode)
  • 【unity小技巧】封装unity适合2D3D进行鼠标射线检测,获取鼠标位置信息检测工具类
  • 8.1每日一题
  • (线段树)SP2916 GSS5 / nfls #2899 查询最大子段和 题解
  • STL进阶典题整理 2025.7.30-2025.8.1