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

Nx单体仓库+Docker+Nginx单端口反向代理配置问题

问题解决:实现Nginx反向代理多Nuxt子路径访问

可以实现该需求,现有配置存在几处关键问题,修改后即可正常运行:

1. 修正Nginx反向代理配置 (reverse_proxy.conf)

现有配置的核心问题是Docker网络内服务寻址错误和路径映射逻辑不匹配需求,修改后的配置如下:

events {
    worker_connections  1024;
}
http {
    # Docker网络内直接用服务名寻址,无需0.0.0.0
    upstream test-1 {
        server event-module:3001; # 对应docker-compose里的event-module服务名
    }
    upstream test-2 {
        server portal-module:3002; # 对应portal-module服务名
    }
    upstream test-3 {
        server user-module:3003; # 对应user-module服务名
    }

    server {
        listen 8080;

        # 配置test-1子路径代理
        location /test-1/ {
            # 重写路径,去掉/test-1前缀后转发给Nuxt
            rewrite ^/test-1/(.*)$ /$1 break;
            proxy_pass http://test-1;
            # 传递必要请求头,确保Nuxt正确处理请求
            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;
        }

        # 配置test-2子路径代理
        location /test-2/ {
            rewrite ^/test-2/(.*)$ /$1 break;
            proxy_pass http://test-2;
            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;
        }

        # 配置test-3子路径代理
        location /test-3/ {
            rewrite ^/test-3/(.*)$ /$1 break;
            proxy_pass http://test-3;
            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;
        }
    }
}

2. 配置Nuxt应用的子路径适配

每个Nuxt应用需要明确自身的运行子路径,否则静态资源、路由会出现404错误:

对于Nuxt 2:

在apps/test-1/nuxt.config.js中添加:

export default {
  router: {
    base: '/test-1/'
  },
  build: {
    publicPath: '/test-1/'
  }
}

对于Nuxt 3:

在apps/test-1/nuxt.config.ts中添加:

export default defineNuxtConfig({
  app: {
    baseURL: '/test-1/'
  },
  nitro: {
    publicAssets: {
      baseURL: '/test-1/'
    }
  }
})

注意:test-2和test-3需要对应修改为/test-2/和/test-3/。

3. 可选优化:移除Docker端口映射(非必需)

由于Nginx和三个Nuxt应用在同一个Docker网络(my_net)内,容器之间可以直接通过服务名+端口通信,无需将Nuxt应用的端口映射到主机。可以删除docker-compose.yml中三个应用的ports配置项,减少暴露的端口。

验证步骤

  1. 修改所有配置后,重启容器:
docker-compose down && docker-compose up --build
  1. 访问测试:
    • http://localhost:8080/test-1/
    • http://localhost:8080/test-2/
    • http://localhost:8080/test-3/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:55:39