web中图片显示不全

这个是图片不显示的时候nginx的配置:

proxy_buffer_size      32k;

proxy_buffers        4 32k;

proxy_busy_buffers_size   64;

 

这个是图片能正常显示的配置:

proxy_buffer_size      512k;

proxy_buffers        4 512k;

proxy_busy_buffers_size   1m;

经过这样的设置,虽然图片是显示出来了,但是这个buffer是不合理的,会浪费内存。

首先,web端这张图片,经过查看,是337KB,所以nginx的第一种配置:4*32+32=160KB ,160KB小于337KB,此时,nginx就会往proxy_temp目录里写(刚刚好前一天晚上,同事把这个目录的权限修改了,导致nginx用户不能往目录里写)。

总结,buffer设置不够大,temp目录又没有权限写,所以才会导致图片显示不全。

 

再来解析下合理的buffer配置:

proxy_buffer_size      128k;

proxy_buffers        4 128k;

proxy_busy_buffers_size   256k;


proxy_busy_buffers_size  256k; 这个256k,是buffers的两倍.指的是高负荷时缓冲大小

proxy_buffer_size这个值应当设置成buffers的后面那个值,或者更小,比buffers大就不行.

proxy_buffers   4 128k;   这个到底填4还是8,得看你的服务器:

输入:

[root@xxx]# getconf PAGESIZE

4096

这就是4096byte,即4kb,所以我们proxy_buffers这里要填4

proxy_buffers   4 128k;   128k这个值   就是你网页中图片或者元素的最大值除以前面这个4得来的。


 

buffer工作原理

首先第一个概念是所有的这些proxy buffer参数是作用到每一个请求的。每一个请求会安按照参数的配置获得自己的buffer。proxy buffer不是global而是per request的。

proxy_buffering 是为了开启response buffering of the proxied server,开启后proxy_buffers和proxy_busy_buffers_size参数才会起作用。

无论proxy_buffering是否开启,proxy_buffer_size(main buffer)都是工作的,proxy_buffer_size所设置的buffer_size的作用是用来存储upstream端response的header。

在proxy_buffering 开启的情况下,Nginx将会尽可能的读取所有的upstream端传输的数据到buffer,直到proxy_buffers设置的所有buffer们被写满或者数据被读取完(EOF)。此时nginx开始向客户端传输数据,会同时传输这一整串buffer们。同时如果response的内容很大的话,Nginx会接收并把他们写入到temp_file里去。大小由proxy_max_temp_file_size控制。如果busy的buffer传输完了会从temp_file里面接着读数据,直到传输完毕。

一旦proxy_buffers设置的buffer被写入,直到buffer里面的数据被完整的传输完(传输到客户端),这个buffer将会一直处在busy状态,我们不能对这个buffer进行任何别的操作。所有处在busy状态的buffer size加起来不能超过proxy_busy_buffers_size,所以proxy_busy_buffers_size是用来控制同时传输到客户端的buffer数量的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值