Nginx配置指向index.html遇404错误,求原因与修复方法
问题分析与修复方案
咱们先拆解下你的Nginx配置里的几个核心问题,这就是导致404错误的根源:
绝对路径误用
你把root设为/var/www/test,但在location /里配置的index /html/index.html是绝对路径(开头带/),Nginx会直接去服务器根目录(/)找html/index.html,而不是你期望的/var/www/test/html/index.html,自然找不到文件返回404。location ^~ /html未匹配到请求
这个规则是匹配以/html开头的请求(比如test.myserver.com/html),但你访问的是站点根路径(test.myserver.com),根本不会触发这个规则,所以它对你的需求毫无帮助。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; } }
最后必做步骤
- 保存配置后,先检查配置语法是否正确:
sudo nginx -t - 语法没问题的话,重启Nginx使配置生效:
sudo systemctl restart nginx - 检查文件权限:确保
/var/www/test/html/index.html的所有者或组包含Nginx运行用户(通常是www-data),避免权限不足导致的异常:sudo chown -R www-data:www-data /var/www/test/html
内容的提问来源于stack exchange,提问作者Timon




