为什么我的 websocket 连接在 60 秒内关闭?

为什么我的 websocket 连接在 60 秒内关闭?

我有一个由 nginx 代理的 Angular Web 应用程序。该应用程序中有一个 websocet 功能,相关部分如下所示:

  location /ws {
    proxy_http_version 1.1;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Upgrade $http_upgrade;
    proxy_pass http://websocket.server:9090/ws;
    proxy_set_header Host $host;
  }

docker-composenginx 已实现 docker 化,并通过自定义镜像在我的计算机上运行:

FROM node:alpine as node-build
WORKDIR /app
ADD ...
RUN npm install
RUN npm run build --prod

FROM nginx:alpine
ADD nginx.conf ./
COPY --from=node-build /app/... /usr/share/nginx/html
version: "3"
services:
  frontend:
    build:
      context: .
    ports:
    - 4200:80
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf

nginx.conf 中除了几个其他位置外没有其他内容:

server {
  listen 80;
  server_name frontend;
  location / {...}
  location /ws {...}
  location /api {...}
}

我使用 Docker Desktop for Mac,v.3.2.1。

它工作正常,只是任何连接都会/ws在 60 秒内关闭,这看起来像是某处设置了超时。我应该检查什么才能修复它?

更新:不管怎样,如果我通过 http://localhost:4200 访问应用程序,就不会发生此问题,但如果我通过主机名或域名访问,就会发生此问题。

答案1

我谷歌了一下,发现这个答案关于 nginx 的超时。通过进行一些测试,我发现以下几个参数

    proxy_read_timeout 1800;
    proxy_send_timeout 1800;

就成功了。

相关内容