Nginx设置缓存后,访问网页404 问题原因及解决方案(随手记)

目录

问题描述

在Nginx中设置缓存expires后,结果重启nginx,网站访问404了。

Nginx文件

shell 复制代码
server {
        listen 80;
        server_name bird.test.com;
        location / {
        		root /app/code/bird/;
                index index.html;
        }
#uri 包含 html、js、css 结尾的文件缓存一天
#~* 后支持正则表达式
        location ~* \.(html|js|css)$ {
                expires 1d;
        }
        location ~* \.(jpg|jpeg|png|gif|bmp)$ {
                expires 1h;
        }
}

解决方案

查看error_log日志

shell 复制代码
2024/06/05 00:00:17 [error] 3189#3189: *1 open() "/etc/nginx/html/index.html" failed (2: No such file or directory), client: 192.168.100.1, server: bird.test.com, request: "GET /index.html HTTP/1.1", host: "bird.test.com"

由上可以发现,在访问时,请求的URI是/etc/nginx/html/index.html,而不是在 location中指定的root /app/code/bird/index.html

问题原因

  • Nginx中location模块是独立的,因此在不同的locaiton中,root不共享。
  • 在Nginx子配置文件中,我将root语句写在location内,再新建location写expires后,这两个location其实并不是一个。
  • 因此在匹配到正则的.html后,访问了默认的nginx路径,导致文件不存在。

修改文件并测试

Nginx文件

shell 复制代码
server {
        listen 80;
        server_name bird.test.com;
        root /app/code/bird/; # 每个location区域都是独立的,如果root写在location内,则在指定缓存时的location中也要添加上root
        location / {
                index index.html;
        }
#uri 包含 html、js、css 结尾的文件缓存一天
#~* 后支持正则表达式
        location ~* \.(html|js|css)$ {
                expires 1d;
        }
        location ~* \.(jpg|jpeg|png|gif|bmp)$ {
                expires 1h;
        }
}

测试

缓存设置成功。

  • 日志:
shell 复制代码
192.168.100.1 - - [05/Jun/2024:00:11:15 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"

总结

  • Nginx中,location内的配置是独立的,不同location不共享配置。
  • 如果需要设置缓存:
    • 要么在原location中直接设置
    • 要么在新location中重制定root
    • 要么直接在server下写root
相关推荐
数智化转型推荐官11 分钟前
2026统一身份管理系统五大发展趋势解读
java·运维·微服务
看菜鸡互14 分钟前
探索用 SlideML 让大模型生成 PPT 的实验方法
java·运维
liguojun20252 小时前
篮球馆自动计时收费系统:从规则配置到自动结算的全流程拆解
java·大数据·运维·人工智能·物联网·1024程序员节
Promise微笑3 小时前
红外分辨率 160×120、320×240、384×288 与 640×480实战选型指南
大数据·运维·人工智能·物联网
云飞云共享云桌面4 小时前
单机建模卡顿运维繁琐!中小型机械制造厂云飞云 3D 云桌面落地
运维·服务器·网络·3d·自动化·电脑·负载均衡
donoot4 小时前
一次 Nginx 502 问题的深度排查:从 SELinux 到容器网络
nginx·docker·selinux·反向代理·502 bad gateway
zandy10115 小时前
体验家 XMPlus 批量操作与自动化工作流引擎:让大规模运营从手动执行走向规则驱动
大数据·运维·自动化
姚不倒5 小时前
从 A 记录到 CDN 切换:我的 DNS 认知跃迁之路
运维·cdn·dns
Sagittarius_A*6 小时前
Docker:渗透前置容器化核心基础
运维·安全·docker·容器
斯蒂文6687 小时前
[MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
缓存·中间件