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

运行Docker镜像时Nginx托管Angular应用报自定义路径权限错误

问题原因

两个核心配置错误导致报错:

  1. Dockerfile的COPY指令路径配置错误:COPY dist/app1/ /usr/share/nginx/html 会直接把app1构建产物下的所有文件平铺复制到nginx的html根目录,不会保留app1子文件夹;后续执行app2的COPY指令时,还会直接覆盖app1已复制的同名文件。最终nginx配置中指定的根目录/usr/share/nginx/html/app1、/usr/share/nginx/html/app2实际不存在,nginx访问对应路径时默认禁止列目录,直接返回403错误。
  2. Nginx配置中匹配静态资源的正则location块为空,请求带后缀的静态资源时匹配到该规则后无任何处理逻辑,会额外引发静态资源加载异常。
修复方案

按以下步骤调整配置即可解决问题:

  • 修正Dockerfile中的COPY指令,确保构建产物复制后保留app1、app2的子目录结构:
COPY dist/app1/ /usr/share/nginx/html/app1/
COPY dist/app2/ /usr/share/nginx/html/app2/
  • 修正Nginx配置,补全静态资源location的处理逻辑,补充index配置,修正后的完整配置如下:
server {
  listen 8002;
  root /usr/share/nginx/html/app1;
  index index.html;
  expires $expires;

  location ~ \.[a-z]+$ {
    try_files $uri =404;
  }

  location / {
    try_files $uri $uri/ /index.html;
    add_header file-served index;
  }
}

server {
  listen 8003;
  root /usr/share/nginx/html/app2;
  index index.html;
  expires $expires;

  location ~ \.[a-z]+$ {
    try_files $uri =404;
  }

  location / {
    try_files $uri $uri/ /index.html;
    add_header file-served index;
  }
}

重新构建镜像后启动,即可正常通过8020、8021端口分别访问两个Angular应用。

注:该报错和容器内文件权限无关,无需额外修改nginx运行用户或目录权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:54:30