在使用浏览器访问自己服务器的过程中,很多用户都经常出现图片显示慢,偶尔也会遇到图片显示不全或只显示图片一部分,或者只显示图片的边框等情况。这该怎么办呢?接下来这篇文章就帮用户排查各种问题:问题定位经过一系列的排查(中间过程我就省略了,直接写重点了!),最终定位到是Nginx的问题。当我打开这位读者的网站后台管理系统,发现图片显示非常慢,在Nginx前端代理上查出如下错误信息。[error]284230:5connect()failed(111:Connectionrefused)whileconnectingtoupstream直接在后台服务器上用后台服务器的IP地址去访问,发现速度相当快,于是怀疑是Nginx的配置问题。注意:当下载大的附件,或是页面中有大图片时,就会下载中断或是图片无法显示,也许你会说我用的Nginx缺省的配置也从来没有碰到过这种问题呀!我想说的是:那是因为你的网站没有大文件,至少没有大到使用Nginx的默认配置加载不出来。这里,我给出一段Nginx的配置,如下所示。location/file{root/home/file;indexindex.htmlindex.htm;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerHost$host;proxy_pass:8080;client_max_body_size100m;client_body_buffer_size128k;proxy_connect_timeout600;proxy_read_timeout600;proxy_send_timeout600;proxy_buffer_size32k;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_buffers缓冲区,网页平均在32k以下的话,这样设置proxy_busy_buffers_size64k;#高负荷下缓冲大小(proxy_buffers2)proxy_temp_file_write_size64k;#设定缓存文件夹大小,大于这个值,将从upstream服务器传看到这里,发现问题了,这位读者的Nginx有下面一行配置。proxy_temp_file_write_size16k;而他服务器上的图片基本都在100K~5M之间。问题就出在proxy_temp_file_write_size上,当服务器上的文件超过该参数设置的大小时,Nginx会先将文件写入临时目录(缺省为Nginx安装目下/proxy_temp目录),缺省Nginx是以nobody身份启动的,用ls-al命令查看proxy_temp目录nobody是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_pass: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;}好了,今天就聊到这儿吧!别忘了点个赞,给个在看和转发,让更多的人看到,一起学习,一起进步!!