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數量的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章