0

花了整整一周的时间,并尝试了所有相关的 stackoverflow 帖子。感谢您来到这里。

我有一个运行 nginx 的 Ubuntu VM,反向代理指向同时在不同端口上运行的各种 docker 守护进程。我所有的静态网站都完美无缺。但是,我有一个运行 expressjs 应用程序的容器。

重新启动服务器大约一个小时后,我得到了响应。然后我得到 502 Bad Gateway。刷新会使站点恢复大约 5 秒钟,直到它永久关闭。这是可重现的。

  • docker 容器在容器内的0.0.0.0:8090上有快速监听

  • 容器正在运行

    02e1917991e6   docker/express-site       "docker-entrypoint.s…"   About an hour ago   Up About an hour   127.0.0.1:8090->8090/tcp   express-site
    
  • 8090 端口已在 Dockerfile 中公开。

  • 我尝试了其他端口。

  • 关闭时,我可以在检查时从容器内卷曲该站点。

  • 关闭时,从 VM 内卷曲站点会产生

    curl: (52) Empty reply from server
    
  • 容器内和虚拟机内的内存和 CPU 使用率几乎没有达到 5%。

  • 站点通常有 SSL,但也尝试过 http。

  • 尝试了各种 nginx 代理设置(见下面的配置)

  • 开箱即用nginx.conf

  • 考虑到它可能与超时或 docker 网络设置有关...

我的站点可用配置文件如下所示:

server {
   server_name example.com www.example.com;

   location / {
        proxy_pass http://127.0.0.1:8090;
        #proxy_set_header Host $host;
        #proxy_buffering off;
        #proxy_buffer_size 16k;
        #proxy_busy_buffers_size 24k;
        #proxy_buffers 64 4k;
   }
    listen 80;
    listen [::]:80;
    #listen 443 ssl; # managed by Certbot
    #ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; # managed by Certbot
    #ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; # managed by Certbot
    #include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    #ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

Nginx 错误日志显示:

2021/01/02 23:50:00 [error] 13901#13901: *46 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: ***.**.**.***, server: example.com, request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:8090/favicon.ico", host: "www.example.com", referrer: "http://www.example.com"

还有人有想法吗?

4

1 回答 1

0

没有得到太多反馈,但我做了更多研究,问题现在稳定了,所以我想发布我的发现。

我已经隔离了 docker 容器的问题。Nginx 可以与直接在 VM 上运行的相同应用程序正常工作。

我将我的 docker 容器映像从 更新node:12-alpinenode:14-alpine. 该站点已运行 42 小时,没有出现任何问题。

如果它再次随机失败,则可能是由于负载。

我希望这可以解决某人的问题。

2021 年 10 月 24 日更新

同样的问题开始了,我已将其范围缩小到我的 Ubuntu 版本上的端口和/或 docker。我可以推荐...

  • 更改端口
  • 重新启动你的电脑
  • 安装最新的操作系统和 docker 更新
于 2021-01-16T22:48:22.137 回答