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

Angular与Nginx部署时PathStrategy失效,子路由404问题求助

解决Angular PathStrategy在Nginx部署下的子路由404问题

1. 修正Dockerfile的静态文件复制路径

你的Angular构建产物存放在dist/register目录,当前Dockerfile将整个dist目录复制到Nginx的html目录,导致静态文件实际位于/usr/share/nginx/html/register下,而非根目录。修改COPY步骤,直接复制dist/register下的内容到Nginx的html根目录:

# Stage 1
FROM node:18-alpine as build-step

RUN mkdir -p /app-ui
WORKDIR /app-ui

COPY package.*json /app-ui/
RUN npm install
COPY . /app-ui/
RUN npm run build

# Stage 2
FROM nginx:alpine

COPY ./.nginx/nginx.conf /etc/nginx/nginx.conf

RUN rm -rf /usr/share/nginx/html/*
# 修正复制路径,直接复制dist/register下的内容
COPY --from=build-step /app-ui/dist/register /usr/share/nginx/html

EXPOSE 80
ENTRYPOINT ["nginx", "-g", "daemon off;"]

2. 修改Nginx配置,适配PathStrategy

当前Nginx配置仅处理/appui路径的请求,而你的应用部署在根路径(localhost/),需要让Nginx将所有匹配不到静态文件的路由请求转发到Angular的入口index.html。更新nginx.conf:

worker_processes 4;

events { worker_connections 1024; }

http {
    server {
        listen 80;
        root  /usr/share/nginx/html;
        include /etc/nginx/mime.types;

        # 处理根路径下所有请求:优先匹配静态文件,匹配不到则转发到index.html
        location / {
            try_files $uri $uri/ /index.html;
        }
    }
}

3. 确认Angular路由配置

Angular默认使用PathLocationStrategy,无需额外配置。确保你的路由模块没有手动切换到HashLocationStrategy——比如没有在RouterModule.forRoot()中设置useHash: true。

完成以上修改后,重新构建Docker镜像并运行容器,访问localhost/users等子路由即可正常加载,无需使用带#的Hash路由。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:06:14