nginx解决图⽚显⽰过慢,下载不完全的问题
写在前⾯
最近,⼀名读者跟我说他通过浏览器访问⾃⼰的服务器时,图⽚显⽰的⾮常慢,以⾄于在浏览器中都⽆法完全加载出来,下载⽂件时,更是恼⽕,⽂件根本就⽆法完全下载下来。⽽且奇怪的是这位读者所在的⽹络是没啥问题的。
于是,我便开始帮他排查各种问题。。。
问题定位
经过⼀系列的排查(中间过程我就省略了,直接写重点了!),最终定位到是Nginx的问题。当我打开这位读者的⽹站后台管理系统,发现图⽚显⽰⾮常慢,在Nginx前端代理上查出如下错误信息。
[error] 28423#0: *5 connect() failed (111: Connection refused) while connecting to upstream
直接在后台服务器上⽤后台服务器的IP地址去访问,发现速度相当快,于是怀疑是Nginx的配置问题。
注意:当下载⼤的附件,或是页⾯中有⼤图⽚时,就会下载中断或是图⽚⽆法显⽰,也许你会说我⽤的Ng
inx缺省的配置也从来没有碰到过这种问题呀!我想说的是:那是因为你的⽹站没有⼤⽂件,⾄少没有⼤到使⽤Nginx的默认配置加载不出来。
这⾥,我给出⼀段Nginx的配置,如下所⽰。
location /file {
nobody mp3下载root /home/file;
index index.html index.htm;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_pass 127.0.0.1:8080 ;
client_max_body_size  100m;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_read_timeout  600;
proxy_send_timeout  600;
proxy_buffer_size  32k;
proxy_buffers  4 64k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
其中⼏个重要的参数如下所⽰。
proxy_connect_timeout 600; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_read_timeout 600; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_send_timeout 600; #后端服务器数据回传时间(代理发送超时)
proxy_buffer_size 32k; #设置代理服务器(nginx)保存⽤户头信息的缓冲区⼤⼩
proxy_buffers 4 32k; #proxy_buffers缓冲区,⽹页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #⾼负荷下缓冲⼤⼩(proxy_buffers*2)
proxy_temp_file_write_size 16k; #设定缓存⽂件夹⼤⼩,⼤于这个值,将从upstream服务器传
看到这⾥,发现问题了,这位读者的Nginx有下⾯⼀⾏配置。
proxy_temp_file_write_size 16k;
⽽他服务器上的图⽚基本都在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 -R 777 /usr/local/nginx/proxy_temp/
如果是使⽤第⼆种⽅式解决问题的话,就可以直接修改f⽂件,如下所⽰。
location /file {
root /home/file;
index index.html index.htm;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_pass 127.0.0.1:8080 ;
client_max_body_size  100m;
client_body_buffer_size 256k;
proxy_connect_timeout 1200;
proxy_read_timeout  1200;
proxy_send_timeout  6000;
proxy_buffer_size  32k;
proxy_buffers  4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 10m;
}
当然,我也帮这位读者优化了⼀些其他的配置项。
好了,今天就聊到这⼉吧!别忘了点个赞,给个在看和转发,让更多的⼈看到,⼀起学习,⼀起进步!!
以上就是nginx解决图⽚显⽰过慢,下载不完全的问题的详细内容,更多关于nginx解决图⽚显⽰过慢,下载不完全的资料请关注其它相关⽂章!