線上問題Connection reset by peer排查處理

語言: CN / TW / HK

出現Connection reset by peer有很多原因造成,我針對我這次遇到的問題的排查過程做個介紹。

解決過程

首先看下錯誤,

image.png

錯誤的資訊是Connection reset by peer,錯誤的類是catalina的ClientAbortException,google上搜到這篇文章,問題指引導到了nginx上來,我沒有直接採取這篇文章的配置方式,先去看了nginx的日誌檔案

bash cd /varlog/nginx tail -f error.log 點選頁面,日誌滾動了

image.png

其中紅框的部分,繼續用google搜尋

看到一篇文章

去到nginx的目錄/urs/local/nginx

image.png

看這使用者使用者組不一樣,還真是許可權問題? 試試改成nginx bash chown -R nginx:nginx /usr/local/nginx/proxy-temp

改完後,立刻介面就能正常返回了。

小結

問題分析

請求的鏈路: 瀏覽器->nginx->server

響應的鏈路: 瀏覽器<-nginx<-server

其中server是部署在servlet容器裡的,我們用的servlet容器是springboot自帶的tomcat。

請求從tomcat發往nginx時,響應包的大小大於nginx的代理檔案大小,於是nginx將檔案寫入臨時目錄,而這個臨時目錄訪問許可權不夠,導致寫不進去,於是nginx把連線重置了,業務伺服器收到connection reset by peer的異常。

問題原因

當代理檔案大小超過配置的proxy_temp_file_write_size值時,nginx會將檔案寫入到臨時目錄下(預設為/proxy_temp)。

如果nginx對/proxy_temp沒有許可權,就寫不進去。

解決方式

調整/proxy_temp許可權為配置nginx的那個使用者。

bash chown -R nginx:nginx /usr/local/nginx/proxy-temp

擴充套件知識

關於nginx proxy_temp目錄

存放臨時響應緩衝的目錄

關於proxy_temp_file_write_size配置

在開啟緩衝後端伺服器響應到臨時檔案的功能後,設定nginx每次寫資料到臨時檔案的size(大小)限制。 size的預設值是proxy_buffer_size指令和proxy_buffers指令定義的每塊緩衝區大小的兩倍, 而臨時檔案最大容量由proxy_max_temp_file_size指令設定。