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

Nginx+Docker+Angular部署时上游请求路径缺失问题求助

Nginx+Docker+Angular部署时上游请求路径缺失问题求助

看起来你遇到了两个核心问题:连接被拒绝和上游请求路径缺失,我来一步步帮你排查解决:

首先解决「连接被拒绝」的问题

你的servertwo容器用的是nginx:stable-alpine镜像,这个镜像默认的Nginx是监听80端口的,但你在Dockerfile里只EXPOSE 4201却没修改Nginx的监听端口配置。这就导致主Nginx尝试连接servertwo:4201时,根本没有服务在这个端口上响应,所以出现了111: Connection refused的错误。

有两种修复方式:

  • 方式一:修改主Nginx的代理端口
    直接把主Nginx配置里的proxy_pass目标端口改成80(servertwo容器实际监听的端口):
    location /profile {
        proxy_pass http://servertwo:80/profile;
        proxy_intercept_errors on;
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-XSS-Protection "1; mode=block" always;
        add_header X-Content-Type-Options "nosniff" always;
        add_header Referrer-Policy "no-referrer-when-downgrade" always;
        add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'" always;
    }
    
  • 方式二:修改servertwo容器的Nginx监听端口
    先给servertwo创建一个自定义Nginx配置文件(比如servertwo-nginx.conf):
    server {
        listen 4201;
        root /var/www/html;
        index index.html index.htm;
    
        # 处理Angular路由刷新的问题,避免直接访问子路径返回404
        location /profile/ {
            try_files $uri $uri/ /profile/index.html;
        }
    }
    
    然后修改servertwo的Dockerfile,复制这个配置并把构建后的Angular文件放到对应路径:
    FROM node:18.8.0-alpine AS servertwo-build
    WORKDIR /usr/src/servertwo
    COPY . .
    RUN npm ci && npm run build
    
    FROM nginx:stable-alpine
    # 替换默认Nginx配置
    COPY servertwo-nginx.conf /etc/nginx/conf.d/default.conf
    # 把Angular构建产物放到/profile路径下,对应baseHref配置
    COPY --from=servertwo-build /usr/src/servertwo/dist/servertwo /var/www/html/profile
    EXPOSE 4201
    

然后解决「上游路径缺失」的问题

你当前的主Nginx配置proxy_pass http://servertwo:4201/profile;其实逻辑是对的:当收到/profile/home请求时,Nginx会把匹配/profile后的/home追加到代理路径后,最终代理到http://servertwo:4201/profile/home。

出现路径缺失的可能原因:

  1. 之前的配置缓存没清:重启主Nginx容器,确保新配置生效。
  2. Angular构建产物的路径没对应上:你已经在angular.json里设置了"baseHref": "/profile/",构建后的文件需要放到servertwo容器的/var/www/html/profile目录下(对应上面方式二的Dockerfile配置),这样servertwo的Nginx才能正确找到资源。

最后验证配置

  1. 重启所有相关容器,确保所有配置修改都生效。
  2. 可以在主Nginx容器里执行curl http://servertwo:80/profile/home(如果用方式一),测试是否能正常返回Angular页面。
  3. 查看servertwo容器的Nginx日志,确认请求路径是否正确到达。

备注:内容来源于stack exchange,提问作者Galina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:13:13