You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Nginx反向代理时如何适配Angular应用的路由与资源路径

问题根源

你遇到的404报错和路由配置无关,核心是两个配置错误:

  1. Angular默认打包的base href为/,所有静态资源(js、css、图片)会从站点根路径请求,你把应用挂载到/admin路径下时,浏览器会直接请求http://XX.XX.XXX.XX/main.XXXXXXXXX.js,而不是带/admin前缀的资源路径,自然匹配到8081端口的服务,返回404
  2. 你的Nginx rewrite规则过于粗暴,会把所有/admin开头的请求都去掉前缀,包括静态资源请求,8085端口的服务无法正确响应资源请求

解决方案

1. 修改Angular base href配置

两种方案二选一即可:

  • 生产环境打包时添加参数:ng build --base-href /admin/,注意前后的斜杠不能省略
  • 直接修改src/index.html中的<base href="/">为<base href="/admin/">

如果是本地开发用ng serve调试,执行以下命令即可适配路径:

ng serve --serve-path /admin/ --base-href /admin/

修改后重新打包/启动应用,部署到8085端口对应的服务路径。

2. 调整Nginx反向代理配置

替换原有配置为以下内容,用proxy_pass末尾的斜杠实现前缀移除,比手动rewrite更稳妥,不会误处理静态资源路径:

server{
    listen 80;
    location / {
        proxy_pass http://127.0.0.1:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
    location /admin {
        # 末尾斜杠是核心,会自动把请求路径里的/admin前缀移除后转发给8085服务
        proxy_pass http://127.0.0.1:8085/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

修改后重启Nginx生效。

3. 还原Angular路由配置

不需要手动给路由加/admin前缀,base href配置完成后Angular路由会自动拼接前缀,直接用原始路由配置即可:

const routes: Routes = [
  {path: '', redirectTo: 'users', pathMatch :'full'},
  { path: 'users', component: ListUsersComponent },
  { path: 'users/:id', component: UserDetailsComponent },
  {path: 'add', component: AddUserComponent}
];

验证

清空浏览器缓存后访问http://你的IP/admin即可正常加载应用。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:57:04