You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Nginx各location块配置静态HTML文件?访问时遇404问题

解决Nginx多Location对应index.html的404问题

我的问题场景

我最近在配置Nginx,想要给每个声明的location块指定对应目录下的index.html文件,初始配置如下:

location / {
    root /usr/src/seo/homepage;
}
location ~ /mypage {
    root /usr/src/seo/mypage;
}
location ~ /mypage2 {
    root /usr/src/seo/mypage2;
}

每个指定的文件夹里都有各自的index.html,但访问/mypage和/mypage2时Nginx总是返回404,我希望能正确渲染对应页面。

问题原因排查

折腾了一会儿才发现,问题出在Nginx的root指令匹配逻辑上:
当使用root时,Nginx会把请求的完整URI直接拼接到root指定的路径后面。比如访问/mypage时,Nginx实际会去查找/usr/src/seo/mypage/mypage这个路径下的文件,但我的index.html明明在/usr/src/seo/mypage/根目录,自然找不到就返回404了。

解决方案

我尝试了两种方法都能解决问题,分享给大家:

方案一:用alias替代root(更推荐)

alias指令会直接将请求的URI替换成指定的目录路径,不会做URI拼接,刚好适配我的场景:

location / {
    root /usr/src/seo/homepage;
    index index.html; # 显式声明index文件,避免全局配置变动影响
}
location ~ /mypage {
    alias /usr/src/seo/mypage;
    index index.html;
}
location ~ /mypage2 {
    alias /usr/src/seo/mypage2;
    index index.html;
}

配置完重启Nginx后,访问/mypage就直接指向/usr/src/seo/mypage/index.html了,完美解决404。

方案二:调整root和location匹配规则

如果不想改指令,也可以调整root的路径和location的匹配范围:

location / {
    root /usr/src/seo/homepage;
    index index.html;
}
location ^~ /mypage/ {
    root /usr/src/seo; # 指向父目录,让URI拼接后得到正确路径
    index index.html;
}
location ^~ /mypage2/ {
    root /usr/src/seo;
    index index.html;
}

这里^~是为了让这个location优先匹配,避免被其他正则规则干扰。访问/mypage/时,Nginx会拼接成/usr/src/seo/mypage/index.html,刚好找到我的文件。

最终结果

我已经通过上述其中一种方法解决了问题,现在访问/mypage和/mypage2都能正常渲染对应的index.html页面了。

内容的提问来源于stack exchange,提问作者Dean Christian Armada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:56:58