線上問題Connection reset by peer排查處理
出現Connection reset by peer有很多原因造成,我針對我這次遇到的問題的排查過程做個介紹。
解決過程
首先看下錯誤,
錯誤的資訊是Connection reset by peer,錯誤的類是catalina的ClientAbortException,google上搜到了這篇文章,問題指引導到了nginx上來,我沒有直接採取這篇文章的配置方式,先去看了nginx的日誌檔案
bash
cd /varlog/nginx
tail -f error.log
點選頁面,日誌滾動了
其中紅框的部分,繼續用google搜尋
看到一篇文章
去到nginx的目錄/urs/local/nginx
看這使用者使用者組不一樣,還真是許可權問題?
試試改成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指令設定。