Hi 各位,
我有个图站,基本上每个页面大约有100-200张图,每张图的大小是10K-500K不等。
在以前没有启用https时,配置的参数如下
client_body_timeout 10;
client_header_timeout 10;
keepalive_timeout 30;
send_timeout 30;
keepalive_requests 200;
keepalive_disable none;
reset_timedout_connection on;
对于用户在不同地区,图片显示都比较正常,就是图片下载速度有所不同,但是都能正常显示。
在开启https以及启用http2后,对于国外用户,就出现了图片显示问题。具体症状是基本上每个页面的图片都不能全部显示,可能显示50张,也可能显示100张。如果刷新页面,可能就正常了。用Firefox做response 追踪发现是在打开网页后,nginx 的http2特性”Multiplexing and concurrency“”把图片的信息一次性发过来,然后firefox对所有图片就开始接收,开始waiting,但是因为带宽优先,所以receiving的过程比较长,导致很多图片waiting了几十秒之后直接timeout没有进入receiving 的阶段。
我尝试把send_timeout 从30s改成了300s,结果就是这个问题基本解决。但是,对于国外用户的访问体验,还不如之前没有开启https和http2。因为之前http时打开页面建立多个连接,可以同时下载几个图片,而现在Http2启用连接复用后,图片加载速度反而减慢了很多。
请问有没有什么更好的办法来解决这个图片加载超时的问题?
多谢