若是網站是部落格類型的 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; ... } ... }