我在 Nginx/Unicorn/Ubuntu 上运行了 rails 应用程序。Nginx 使用 Unicorn 作为上游进行设置,如下所示:
upstream unicorn {
server unix:/path/to/sockets/unicorn.sock fail_timeout=0;
}
和
location @unicorn {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://unicorn;
}
除了一种请求类型之外,其他一切都正常。页面正在尝试将 HTML 保存到数据库。因此,这是一个很大的请求。请求被传递给 unicorn,HTML 被保存到数据库,但随后页面显示 502 错误。我检查了 nginx 日志,结果显示:
epoll_wait() reported that client prematurely closed connection, so upstream connection is closed too (104: Connection reset by peer) while reading upstream
我尝试使用以下方法增加代理缓冲区大小:
http {
...
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
...
}
但问题仍然存在。
知道为什么会发生这种情况以及如何解决吗?