花了整整一周的时间,并尝试了所有相关的 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"
还有人有想法吗?