You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Nginx配置指向index.html遇404错误,求原因与修复方法

问题分析与修复方案

咱们先拆解下你的Nginx配置里的几个核心问题,这就是导致404错误的根源:

  1. 绝对路径误用
    你把root设为/var/www/test,但在location /里配置的index /html/index.html绝对路径(开头带/),Nginx会直接去服务器根目录(/)找html/index.html,而不是你期望的/var/www/test/html/index.html,自然找不到文件返回404。

  2. location ^~ /html 未匹配到请求
    这个规则是匹配以/html开头的请求(比如test.myserver.com/html),但你访问的是站点根路径(test.myserver.com),根本不会触发这个规则,所以它对你的需求毫无帮助。

  3. try_files 路径指向错误
    第一个location里的try_files index.html $uri $uri/ / =404,这里的index.html是相对于root/var/www/test)的路径,也就是找/var/www/test/index.html,不是你要的html子目录下的文件。


修复方案(两种可选)

方案一:直接修改root指向目标目录(推荐,最简洁)

root改成/var/www/test/html,让Nginx直接在目标目录里查找默认索引文件,配置简化后更清晰:

server {
    listen 80;
    listen [::]:80;
    # SSL配置,需要启用时去掉注释并配置证书
    # listen 443 ssl;
    # listen [::]:443 ssl;

    root /var/www/test/html;
    index index.html index.htm index.nginx-debian.html;

    server_name test.myserver.com www.test.myserver.com;

    location / {
        try_files $uri $uri/ =404;
    }
}

方案二:保留原root,修正索引路径

如果不想调整root,可以把index改成相对路径(去掉开头的/),让Nginx基于root去查找子目录里的索引文件:

server {
    listen 80;
    listen [::]:80;
    # SSL配置,需要启用时去掉注释并配置证书
    # listen 443 ssl;
    # listen [::]:443 ssl;

    root /var/www/test;
    index html/index.html index.htm index.nginx-debian.html;

    server_name test.myserver.com www.test.myserver.com;

    location / {
        try_files $uri $uri/ =404;
    }
}

最后必做步骤

  1. 保存配置后,先检查配置语法是否正确:
    sudo nginx -t
    
  2. 语法没问题的话,重启Nginx使配置生效:
    sudo systemctl restart nginx
    
  3. 检查文件权限:确保/var/www/test/html/index.html的所有者或组包含Nginx运行用户(通常是www-data),避免权限不足导致的异常:
    sudo chown -R www-data:www-data /var/www/test/html
    

内容的提问来源于stack exchange,提问作者Timon

火山引擎 最新活动