我有一个由 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;
}
Run Code Online (Sandbox Code Playgroud)
docker-composenginx 是 dockerized 的,并通过自定义构建的映像在我的机器上运行:
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
Run Code Online (Sandbox Code Playgroud)
version: "3"
services:
frontend:
build:
context: .
ports:
- 4200:80
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
Run Code Online (Sandbox Code Playgroud)
除了其他几个位置之外,nginx.conf 中没有其他任何内容:
server {
listen 80;
server_name frontend;
location / {...}
location /ws {...}
location /api {...}
}
Run Code Online (Sandbox Code Playgroud)
我使用 Mac 版 Docker Desktop v.3.2.1。
它工作正常,只是任何连接都会/ws在 60 秒内关闭,这看起来像是在某处设置了超时。我应该检查什么才能修复它?
更新:就其价值而言,如果我通过 http://localhost:4200 访问应用程序,则不会发生此问题,但如果我通过主机名或域名访问,则会发生此问题。
我用谷歌搜索了一下,发现了这个关于 nginx 超时的答案。通过进行一些测试,我发现这几个参数
proxy_read_timeout 1800;
proxy_send_timeout 1800;
Run Code Online (Sandbox Code Playgroud)
就可以了。
| 归档时间: |
|
| 查看次数: |
6450 次 |
| 最近记录: |