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

Angular+Nginx部署Docker/EC2仅加载index.html,静态文件404求助

解决方案:Angular部署后静态资源404问题

核心原因分析

本地开发正常但所有部署方式都出现静态资源404,说明问题出在Angular的构建配置而非服务器(Nginx/Apache/S3)配置。本地npm run start会自动处理base路径,但生产构建时需要明确配置资源根路径。

具体修复步骤

1. 构建时指定正确的base href

执行构建命令时,添加--base-href参数指定根路径(如果部署在EC2实例的根域名/IP下,直接用/):

npm run build -- --base-href /

如果你的应用部署在子路径下(比如http://your-ec2-ip/app),则改为对应路径:

npm run build -- --base-href /app/

2. 永久配置base href(可选)

如果不想每次构建都加参数,可以修改angular.json文件,找到对应项目的构建配置,添加baseHref选项:

"projects": {
  "front-app": {
    "architect": {
      "build": {
        "options": {
          "baseHref": "/",
          // 其他配置...
        }
      }
    }
  }
}

3. 验证构建产物的资源路径

构建完成后,打开dist/front-app/browser/index.html,检查静态资源的引用路径是否以/开头,例如:

<!-- 正确的绝对路径 -->
<script src="/runtime.abc123.js"></script>
<link rel="stylesheet" href="/styles.def456.css">

<!-- 错误的相对路径(会导致404) -->
<script src="runtime.abc123.js"></script>

如果是相对路径,说明base href配置未生效,重新执行带参数的构建命令即可。

4. 额外Nginx检查(可选)

虽然服务器配置不是核心问题,但可以确保Nginx配置完整:

  • 确认nginx.conf中补充default_type application/octet-stream;(避免部分资源无法识别)
  • 检查容器内Nginx日志,执行docker exec <容器ID> tail -f /var/log/nginx/error.log,看是否有权限或路径错误提示

测试验证

重新构建镜像并运行:

sudo docker build -t fe-app .
sudo docker run -d -p 80:80 fe-app

访问EC2实例的IP,检查静态资源是否正常加载。

内容的提问来源于stack exchange,提问作者jérôme C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 01:56:06