我面临的问题是:
我通过ajax从浏览器发出请求并发送处理请求,一旦进行了ajax调用,我会显示一个带有进度条的弹出窗口,弹出窗口大致保留在页面上,大概是2到4分钟之间,并突然关闭。当我通过chrome网络选项卡看到请求时,我看到该请求在弹出窗口显示的相同持续时间内停止。我看到逻辑正在按预期在后台执行,但弹出窗口没有等待响应并在它应该关闭之前关闭。
我已将日志级别设置为7,并且我看到以下信息
如果有50条记录需要处理,我会在这50条记录开始处理之前看到这些信息(即我看到下面的50行)
[pid = 29768 thr = 70024879087720 file = abstract_request_handler.rb:472 time = 2016-08-30 08:06:43.250]:在主插座上接受新请求
最后我看到了这个
[pid = 29571 thr = 139782938920704 file = ext / nginx / HelperAgent.cpp:923 time = 2016-08-30 08:10:32.682]:无法将HTTP响应转发回HTTP客户端:似乎用户点击了浏览器中的“停止”按钮。
我怀疑它有一些超时问题,但不确定它是否处于乘客级别或ngnix级别。
我尝试将各种ngnix超时参数设置为更高的值,但它没有帮助。
proxy_read_timeout 400s;
client_body_timeout 180s;
keepalive_timeout 180s;
client_header_timeout 180s;
**I suspect it might be some issue with passenger config, but not sure.**
任何人都可以让我知道我能做什么,以便请求继续而不会突然结束
答案 0 :(得分:0)
这是文件上传/下载? 对于我在相关位置使用的下载
namespace boost {
namespace spirit { namespace x3 { namespace traits {
template <>
struct is_substitute<raw_attribute_type,boost::string_view> : boost::mpl::true_
{};
}}}
}
对于文件上传,我使用
proxy_buffering off;
proxy_request_buffering off;
chunked_transfer_encoding on;
client_body_timeout 3600;
proxy_read_timeout 900;
(警告,如果您返回相关位置的位置,则应在第一个位置设置)
还是某种关于http的事件?有块吗?活着 ? 对于我使用的块:
client_max_body_size 10m;
client_body_timeout 600s;
(关于块的信息,如果使用sub_filter指令的块,NGINX纠正了1.11.2中的旧错误)
在浏览器中,在“网络”选项卡的“调试窗口”中,请求失败后显示的错误或状态是什么?
状态代码和/或响应标题?
有时预览中可能还有回复/信息。
答案 1 :(得分:0)
从你的问题来看,目前还不是很清楚谁在终止请求 - 浏览器,nginx甚至乘客本身。
确保长时间运行的HTTP连接不会被垃圾收集并过早关闭的最佳做法是确保某些小数据始终以特定间隔通过连接发送,例如,尝试发送几个空格或评论每90秒(或一些这样的),看看是否能解决问题。