場景
專案發現某個介面異常,檢視nginx日誌是499錯誤,request_time大概是0.2s。谷歌後瞭解到nginx的499錯誤是使用者主動斷開連線導致的,哪怕介面並不是很慢。
如何模擬499
curl -m 0.01 "http://192.168.0.1/common/getDepart"
curl: (28) Operation timed out after 10 milliseconds with 0 bytes received
如何改進
nginx收到使用者主動斷開請求,預設是直接斷開後端反向代理的。雖然使用者那邊已經無法改善,但是可以用nginx日誌記錄此次後端的真實響應過程(此次請求使用者端雖然已經斷開,nginx也斷開了後端代理,但是後端其實仍然完整處理了任務),比如upstream_status和upstream_response_time(預設nginx都是記錄的-)。如何記錄呢,在nginx配置檔案的server端加上:
fastcgi_ignore_client_abort on; //如果後端是fastcgi,比如php-fpm
proxy_ignore_client_abort on; //如果後端是http服務
本作品採用《CC 協議》,轉載必須註明作者和本文連結