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

基于Docker与Nginx实现NX MFE独立部署的路由问题排查

解决方案:修改Nginx配置确保初始文档始终来自主机应用

问题核心是当前配置会把所有/app1/路径的请求都代理到MFE容器,导致直接访问该路径时返回MFE的index.html。通过调整Nginx的路由规则,让只有MFE的静态资源文件被代理,而所有路径访问(包括/app1)都返回主机的index.html,即可解决问题。

具体配置修改

替换原有Nginx配置中的location /app1/块,新增精准匹配MFE资源的规则,并保留主机根路径的处理逻辑:

upstream remote_app1 {
  server remote_app1_container:80;  
}

server {
  # 保留原有listen、server_name等基础配置
  ..

  # 1. 优先代理MFE的静态资源文件
  location ~ ^/app1/(remoteEntry\.js|main\.js|polyfills\.js|runtime\.js|styles\.css|assets/.*)$ {
      proxy_pass http://remote_app1/$1;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      
      # 对MFE静态资源应用缓存策略(和主机一致)
      expires 1w;
      add_header Cache-Control "public";
  }

  # 2. 主机应用的根路径处理,所有未匹配资源的请求都走这里
  location / {
    alias /usr/share/nginx/html/host/;
    try_files $uri $uri/ /index.html;

    # 禁止缓存JSON文件
    location ~* \.(json)$ {
        expires -1;
        add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
    }

    # 缓存静态文件
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|eot|woff|woff2|ttf)$ {
      expires 1w;
      add_header Cache-Control "public";
    }

    location = /index.html {
      expires -1;
      add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
    }
  }
}

关键逻辑说明

  • 当直接访问www.my-site.com/app1时,请求会进入location /块,触发try_files规则,返回主机的index.html。主机Angular应用加载完成后,会自动请求MFE的remoteEntry.js等资源,这些请求会匹配到第一个location规则,被代理到MFE容器获取对应文件。
  • 从根路径跳转至/app1时,逻辑完全一致,依然由主机的index.html主导加载流程,保持原有正常功能。
  • 正则规则中的资源列表可根据MFE实际构建产物补充(比如如果有其他命名的chunk文件,需要添加到正则中)。

配套调整MFE容器的Nginx配置

为避免意外情况,确保MFE容器的Nginx只返回静态资源,不处理路由返回自身的index.html:

server {
  listen 80;
  root /usr/share/nginx/html;

  location / {
    try_files $uri =404; # 仅返回存在的文件,找不到则返回404
  }

  # 静态资源缓存策略
  location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|eot|woff|woff2|ttf)$ {
    expires 1w;
    add_header Cache-Control "public";
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:07:31