作者个人研发在高并发场景下提供了一个简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。开源半年多以来,已成功为十几家中小企业提供精准定时调度解决方案,经受住了生产环境的考验。为了造福更多的童鞋,这里提供一个开源的框架地址:https://github.com/sunshinelyz/mykit-delay写的比较早,有位读者告诉我,当他通过浏览器访问他的服务器时,图片显示的是慢到浏览器加载不完全,下载文件的时候更烦,文件根本下载不完全。而且奇怪的是,这个阅读器所在的网络没有问题。于是,我开始帮他排查各种问题。..问题定位经过一系列排查(我省略了中间过程,直接写重点!),最终定位到Nginx的问题。打开这个读者网站的后台管理系统,发现图片显示很慢,在Nginx前端代理上发现如下错误信息。[error]28423#0:*5connect()failed(111:Connectionrefused)whileconnectingtoupstream是直接在后台服务器上用后台服务器IP访问,发现速度挺快的,怀疑是是Nginx的配置问题。注意:在页面下载大附件或大图片时,会导致下载中断或无法显示图片。也许你会说,我Nginx的默认配置从来没有遇到过这样的问题!我想说的是:那是因为你的网站没有大文件,至少没有大到Nginx默认配置无法加载的程度。这里,我给出一段Nginx的配置,如下图。位置/文件{root/home/file;indexindex.htmlindex.htm;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerHost$host;proxy_passhttp://127.0.0.1:8080;client_max_body_size100m;client_body_buffer_size128k;proxy_connect_timeout600;proxy_read_timeout600;outproxy2ksend;outproxy60;proxy_buffers464k;proxy_busy_buffers_size64k;proxy_temp_file_write_size64k;}几个重要的参数如下。proxy_connect_timeout600;#nginx与后端服务器连接超时(代理连接超时)proxy_read_timeout600;#连接成功后,后台服务器响应时间(代理接收超时)proxy_send_timeout600;#后端服务器数据返回时间(代理发送超时)proxy_buffer_size32k;#设置代理服务器(nginx)保存用户头信息的缓冲区大小proxy_buffers432k;#proxy_buffersbuffer,如果平均网页在32k以下,像这样设置proxy_busy_buffers_size64k;#高负载缓冲区大小(proxy_buffers*2)proxy_temp_file_write_size16k;#设置缓存文件夹的大小。如果大于这个值,就会从上游服务器传过来看到这里。有一个问题。这位读者的Nginx有如下一行配置。proxy_temp_file_write_size16k;而他服务器上的图片基本都在100K~5M之间。问题出在proxy_temp_file_write_size。当服务器上的文件超过该参数设置的大小时,Nginx会先将文件写入临时目录(默认为Nginx安装目录下的/proxy_temp目录)。Nginx默认以nobody启动,使用ls-al命令查看proxy_temp目录。没有人是proxy_temp目录的所有者。如果奇怪,为什么没有权限?接下来查看proxy_temp的父目录,也就是Nginx的安装目录。发现nobody没有权限,难怪会出现上面的问题。解决问题定位问题,然后解决问题比较简单。这个问题可以通过以下两种方式解决。设置任何人都可以写的proxy_temp目录,重启Nginx即可解决。直接改proxy_temp_file_write_size的值,修改成大于图片和文件的大小,重启Nginx。如果采用第一种方式解决了问题,比如我的proxy_temp目录是/usr/local/nginx/proxy_temp,则使用如下命令设置/usr/local/nginx/proxy_temp目录为任何人可写,并且问题解决了。chmod-R777/usr/local/nginx/proxy_temp/如果使用第二种方法解决问题,可以直接修改nginx.conf文件,如下图。location/file{root/home/file;indexindex.htmlindex.htm;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerHost$host;proxy_passhttp://127.0.0.1:8080;client_max_body_size100m;client_body_buffer_size256k;proxy_connect_timeout1200;proxy_read_timeout1200;proxy_send_timeout6000;proxy_buffer_size32k;proxy_buffers464k;proxy_busy_buffers_size128k;proxy_temp_file_write_size10m;}当然,我也为这位读者优化了其他一些配置项。好了,今天就到这里吧!别忘了点赞、观看和转发,让更多人看到,一起学习,一起进步!!,您可以通过以下二维码关注。转载本文请联系冰川科技公众号。
