我们正在try 对接NestJS REST API和VueJS应用程序.

为此,有一个docker-compose.yaml和两个Docker文件:

docker-compose.yml:

version: '3.8'

services:
  fox-deck-app:
    build:
      context: .
      dockerfile: app.Dockerfile
    ports:
      - "80:80"
    networks:
      - fox-deck-network
    depends_on:
      - fox-deck-api

  fox-deck-api:
    build:
      context: .
      dockerfile: api.Dockerfile
    ports:
      - "3000:3000"
    networks:
      - fox-deck-network

networks:
  fox-deck-network:
    driver: bridge

app.Dockerfile:

FROM node:20.11.1-alpine3.19 as build-stage
WORKDIR /app
COPY apps/fox-deck-app/package*.json ./
RUN npm install --prefer-offline --no-audit --progress=false
COPY apps/fox-deck-app/ .
RUN npm run build
FROM nginx:alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
RUN rm /etc/nginx/conf.d/default.conf
COPY apps/fox-deck-app/default.conf /etc/nginx/conf.d/
EXPOSE 80

api.Dockerfile:

FROM node:20.11.1-alpine3.19 as api-stage
WORKDIR /usr/src/app
COPY apps/fox-deck-api/package*.json ./
RUN npm ci --prefer-offline --no-audit --progress=false
COPY apps/fox-deck-api/ .
COPY apps/fox-deck-api/.env.example /usr/src/app/.env
RUN npm rebuild  # Rebuilds all native dependencies, used because we use c++ libraries
RUN npm run prisma:migrate
EXPOSE 3000
CMD ["npm", "run", "start:dev"]

在VueJS应用程序中,有一个反向代理将所有请求重定向到API,而不是/api.VueJS应用通过nginx提供服务.因此,这里也有一个nginx.config:

default.conf:

server {
    listen 80;

    location / {
        root /usr/share/nginx/html;
        try_files $uri $uri/ /index.html;
    }

    location /api {
        proxy_pass http://fox-deck-api:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

这两个容器也会启动,但是对/api/login的请求没有被正确地重定向,并且您会得到404错误.已经有各种try 对VueJS URL的反向代理nginx.config进行调整,但到目前为止我们还没有找到解决方案.

完整的更改也可以在GitHub:https://github.com/Foxdeck/fox-deck/pull/47上找到

推荐答案

您需要将Location/API放在您的nginx conf中的Location/上方.

Node.js相关问答推荐

DocuSign:调用createEntaine时,RequestJWTApplicationToken返回401 AUTHORIZATION_INVALID_TOKEN

是否可以在MongoDB中比较和匹配引用文档中的字段

如何修复PostgreSQL和NodeJS/NestJS应用程序之间的日期时间和时区问题?

如何在 JavaScript 中显示多维数组中使用的一维数组的变量名?

Typescript :泛型类又扩展了另一个泛型类

如何获取文件的中间值?

Next.js 在我的电脑上没有构建错误,但它们在使用 Vercel 部署时发生

Typescript typeRoots 未检测到类型定义

当其中一个端点不工作时,如何使用 axios.all() 调用多个 API?

更新文档数组中的文档 Mongoose

使用Typescript 时我应该避免循环导入吗?

Discord.js V14 interaction.editReply 给出了一个无效的 webhook 令牌错误

类 WebSwapCGLLayer 在 Mac OS X /System 和 node_modules 中都实现了

Azure Function 在 2022 年 4 月 26 日禁用将用户字段设置为 HTTP 请求对象

Chrome 浏览器未将 if-modified-since 标头发送到服务器

使用 Webpack 和 font-face 加载字体

通过 POST 请求将数据从 node.js 服务器发送到 node.js 服务器

Node.js, require.main === 模块

Forever + Nodemon 一起运行

我可以让 node --inspect 自动打开 Chrome