如何修复静态站点的Nginx配置?解决Docker化Nginx返回406错误问题
解决Nginx静态站点返回406错误的问题
首先,咱们先揪出你的配置里最核心的问题——语法错误!你把index和root指令挤在了同一行,而且index指令没加闭合分号,导致Nginx把root /var/www/html/xlanding当成了index指令的参数,直接打乱了路径解析的逻辑,这肯定会出问题。
修正后的基础配置
先把配置的语法和指令顺序调整正确:
location / { root /var/www/html/xlanding; index index.html; try_files $uri $uri/ =404; }
关键调整点:
- 每个指令单独一行,用分号闭合,这是Nginx配置的基本语法要求
- 把
root指令放在index之前(虽然顺序不影响功能,但这是更规范的写法) - 把
try_files的最后一个参数改回=404,406是「请求的内容类型服务器无法提供」,和静态文件找不到的场景不匹配,你之前改它只是为了确认配置匹配,现在可以恢复正常错误码
为什么之前会返回406?
因为原配置的语法错误,Nginx解析时把root路径当成了索引文件名的一部分,导致它找不到正确的索引文件,最终触发try_files的最后规则返回了你指定的406错误。
额外验证步骤(如果修正后仍有问题)
- 检查文件权限:进入Docker容器,确认Nginx进程用户(一般是
www-data)能读取目标文件:ls -l /var/www/html/xlanding/index.html chown www-data:www-data /var/www/html/xlanding/index.html chmod 644 /var/www/html/xlanding/index.html - 重新加载配置:修改配置后一定要让Nginx生效:
nginx -s reload - 查看错误日志:如果还是有问题,去Nginx错误日志里找细节(路径一般是
/var/log/nginx/error.log):
访问网站后,日志会告诉你具体的路径解析或权限问题。tail -f /var/log/nginx/error.log
等你把静态站点的配置搞定后,后续加/blog路径的WordPress也很简单,只要在现有配置后新增一个location /blog块,指向WordPress的根目录并配置PHP解析规则就行。
内容的提问来源于stack exchange,提问作者O. Altun




