2016年4月30日 星期六

Nginx 優化你的網站文章編輯效能

若是網站是部落格類型的 CMS 或是維基百科等需要大量編輯文章的網站,在你進行編輯大量的頁面時應該會時常遭遇 client body buffer 或是 Connection timed out 的問題

 
Error Log: 

upstream response is buffered to a temporary file "xxx" while reading upstream
client request body is buffered to a temporary file "xxx"
Upstream timed out (110: Connection timed out) while reading response header from upstream



 

若是你的 Nginx 沒有進行調整 body buffer 等設定就會在 error.log 常常看到這樣的訊息

 

situation.1

在觸發 response buffered 的時候通常是你預設 nginx 緩衝的 body size 預存的記憶體已經不敷使用了,所以採用檔案寫入的方式,這不算是一個嚴重的錯誤,但是因為是硬碟進行讀寫,所以效能會緩慢非常多!

 

此時你必須在 Nginx 設定中加入以下
server { 
...
client_max_body_size 100m;
client_body_buffer_size 102400k;
client_header_buffer_size 1k;
large_client_header_buffers 2 1k;
...
}

加大 nginx 在處理 body 時的 buffer,實際的應用資源就看你的記憶體大小而定,可以有效的加速文章編輯的處理速度!

 

 

situation.2

如果你在編輯文章時,時常等待很久甚至導致失敗,從 error.log 又出現 response Connection time out 等訊息,通常有可能和 situation.1 同時有連帶關係,若是處理太慢就會導致 connection time out,但若是你的頁面資料實在太多,真的必須處理這麼久的話可以加入 timeout

 

延長 php-cgi 的 timeout 時間
server { 
...
location ~* .php$ {
...
fastcgi_read_timeout 150;
...
}
...
}

 

若是你有採用 proxy 也必須在 nginx proxy 加入 timeout,避免 proxy 直接放棄此工作,將會造成 AP 不必要的資源佔用。
server { 
...
location / {
...
proxy_read_timeout 150;
...
}
...
}

 

Orignal From: Nginx 優化你的網站文章編輯效能

沒有留言:

張貼留言