Nginx未配置子域名跳转至Angular应用404页面问题排查
问题根源:Nginx配置遗漏
这是Nginx的配置问题,和Angular路由无关。
当你访问未配置的子域名(比如app-test.sub.example.com)时,Nginx找不到对应server_name的server块,就会把请求转发给默认server——而你的Angular应用所在的server块刚好被Nginx当作了默认server(通常是第一个加载的server配置),所以请求会落到Angular应用的根目录,加载index.html,之后Angular路由捕获到未知路径,触发**规则跳转到/not-found。
解决方案
你需要创建一个专门的默认server块,处理所有未匹配到的子域名请求,避免它们落到Angular应用的server块:
- 添加默认server配置
server { listen 80 default_server; server_name _; # 匹配所有未被其他server块覆盖的域名 return 444; # 直接关闭连接,也可以改成 return 404 "Unknown Subdomain"; 返回明确的404提示 }
- 确保Angular应用的server块仅处理指定子域名
你的现有Angular server块无需修改server_name,但要确保它没有设置default_server(如果之前加过的话要去掉),让它只响应app.sub.example.com的请求:
server { server_name app.sub.example.com; listen 80; root /var/www/app; index index.html index.htm; location / { try_files $uri $uri/ /index.html; } }
- 重启Nginx生效
执行命令:
sudo nginx -s reload
这样,所有未配置的子域名请求都会被默认server处理,直接返回404或关闭连接,不会再触发Angular应用的路由逻辑。
内容的提问来源于stack exchange,提问作者Isu
相关产品推荐
相关产品推荐

