Nginx所有请求被重定向至根目录的配置错误排查
配置问题排查
你的配置存在以下几个明确问题,直接导致访问异常:
- 80端口server块存在大量无效配置:Nginx中server块根级编写的
return指令优先级高于所有location匹配逻辑,你在该块内重复写了两次301跳转规则,块内配置的root、index、location规则永远不会执行,属于冗余内容。 - 443站点未单独配置
/app路径的解析规则:你部署在根目录/app文件夹下的管理后台,和前台站点共用根路径的解析逻辑。如果前台是Vue/React类单页应用,开启路由fallback的try_files规则后,/app路径下的请求找不到对应静态文件时,会直接返回根目录的index.html,就会出现所有请求都跳首页的现象。 - 配置冗余:root路径完全一致,不需要在每个location块重复编写;443端口IPv4监听未开启http2,和IPv6监听配置不一致;80端口单独配置的日志无实际意义,所有80请求都是301跳转,不需要单独存日志。
修正后配置
按以下逻辑调整配置:优先匹配/app路径,单独给/app配置静态文件解析和路由fallback规则,再配置根路径的前台站点解析,删除所有冗余无效内容:
# HTTP 统一跳转HTTPS,删除所有无效冗余配置 server { listen 80; listen [::]:80; server_name xxxxxxx.io www.xxxxxxx.io; return 301 https://xxxxxxx.io$request_uri; } # HTTPS 主站点配置 server { listen 443 default_server ssl http2; listen [::]:443 ssl http2; server_name xxxxxxx.io www.xxxxxxx.io; # SSL证书配置(Certbot自动生成,无需修改) ssl_certificate /etc/letsencrypt/live/xxxxxxx.io/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/xxxxxxx.io/privkey.pem; # 统一配置站点根目录,所有location默认继承该配置,无需重复写 root /home/ubuntu/xxxxxxx-ui/_work/xxxxxxxWebV1/xxxxxxxWebV1/build/web/; index index.html index.htm index.php; charset utf-8; # 优先匹配/app路径,优先级高于根路径规则 location /app { # 此处继承server块的root配置,请求会自动匹配根目录下/app文件夹内的资源 # 找不到对应文件时fallback到/app目录下的index.html,适配后台单页路由 try_files $uri $uri/ /app/index.html; } # 根路径前台站点规则 location / { # 找不到对应文件时fallback到根目录index.html,适配前台单页路由 try_files $uri $uri/ /index.html; } # 统一日志配置 error_log /var/log/nginx/xxxxxxx.log; access_log /var/log/nginx/xxxxxxx.log; }
生效操作
- 配置修改完成后,先执行
nginx -t命令校验配置语法,确认没有报错。 - 语法校验通过后,执行
nginx -s reload重载Nginx配置即可生效。 - 提前检查/app目录的文件权限,确保Nginx运行用户有该目录的读取权限,避免出现403错误。
- 如果你的管理后台不是单页应用,而是PHP类动态程序,只需要在/app的location块中额外添加PHP解析规则即可,不需要修改现有静态文件匹配逻辑。
内容的提问来源于stack exchange,提问作者javalove
相关产品推荐
相关产品推荐

