Site icon Mr. 沙先生

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;
    ...
  }
...
}

 

Exit mobile version