<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
根據客戶需求對接一個停車繳費的功能,釋出到生產環境之後發現,少量賬單同時支付沒有問題,一旦同時支付的賬單數量超過某個值,就會出現網路連線問題,穩定復現。
首先檢視了應用的紀錄檔,發現使用者提示網路異常的時候,伺服器端沒有任何相關的紀錄檔列印,確定請求沒有發到伺服器端
檢視Nginx Error紀錄檔發現列印了錯誤資訊
2021/09/09 08:38:56 [error] 16299#16299: *240963 readv() failed (104: Connection reset by peer) while reading upstream, client: ****, server: ****, request: "POST ****?formData=E172Rfbkeuw2Z6fFYyg95hUMDmDwaOZT7Mqopwu07lo%3CVxsdDikPopy1XjjtjmvSusJwb7UF3erixZi5Wy099%3CewyDvM3wWhvE8X/z/vxKow2ttM1iHPSmWn...
通過nginx紀錄檔發現,雖然是nginx層丟擲了錯誤,但是以紀錄檔內容來看,其實nginx已經是將請求的報文完整的接收了下來(這個也是在解決問題之後才反應過來),所以其實問題應該是出在Nginx將請求轉給被代理的應用服務的時候。
當時在排查問題的時候,沒有考慮到還有一層tomcat,導致哪怕是當時懷疑了問題不在nginx這塊,還是不敢相信自己,去網上一頓亂搜。
在tomcat/conf/server.xml中,增加Connector中的引數設定maxHttpHeaderSize="65536",增加允許tomcat接收的最大請求頭大小
<Connector port="****" protocol="org.apache.coyote.http11.Http11NioProtocol" URIEncoding="UTF-8" maxHttpHeaderSize="65536" connectionTimeout="20000" acceptCount="500" maxThreads="500" redirectPort="****" />
TCP RST
正常情況,伺服器端使用socket建立一個伺服器端監聽,使用者端通過socket向伺服器端監聽發起連線, 雙方經過TCP握手協定之後,資料開始傳輸,TCP協定規定連線在建立之後,雙方只要有一端發起關閉的訊號,兩端就會走放手協定的流程(四次揮手),不再進行資料傳輸。但是如果一端發起關閉訊號之後,不再接收請求,另外一端依然不進入關閉流程,而是依然不停的傳送資料,或者是關閉的一端快取區的資料沒有讀完就進行了關閉,這時候,關閉的一端就會返回一個RST的訊號,告訴另外一端連線被重置
其他情況的RST
除了上邊的一種情況,RST還可能出現在使用者端找不到伺服器端埠,伺服器端因為各種關閉不接收資料等等場景中,但是無一例外,最終就是一端的資料,沒有被另外一端完整讀取到 ,比如以下幾種情況
其實在一定程度上說,Tomcat和Nginx的作用相同,只不過兩者的職責不同,Nginx使用了非同步非阻塞高效能的組合,可以代理各種各樣的URI資源,而Tomcat代理的是一個一個的Servlet容器,它可以容納所有遵循Servlet規範的應用,並且統一將它們管理。Connector是其中最重要的一部分,它是一個HTTP聯結器,它通過啟動一個Socket監聽,用來接收不同型別的請求,然後把他們解析成對應的Servlet規範的請求,才會將這些請求分發到不同的Servlet中進行處理。當然,內部做了很多其他的事情包括請求校驗攔截,請求轉化,請求非同步執行緒處理等等。這裡只是簡單介紹一下,後續會增加關於tomcat部分的文章
在我們這個案例的場景下分析,nginx要將拿到的請求轉發給tomcat中的應用,需要跟tomcat的Connector建立連線,可以將nginx理解為使用者端,將tomcat中的Connector理解為socket伺服器端。tomcat給Connector一套預設的設定,其中maxHttpHeaderSize預設的值是4096位元組,也就是4kb。超過4kb的請求頭大小的請求,不進行處理,當然這裡也有可能發生兩種情況,第一種是Connector一開始就知道nginx發過來的請求頭過大,直接不接收,響應回去RST標識,還有一種是Connector沒有管請求頭的大小,直接去接收,但是因為沒有將請求頭資料讀取完就關閉了,響應了RST。這部分沒有細看,但是不論怎麼說,都是因為上邊說過的,沒有正常處理完使用者端傳送過來所有的資料。
在開始無腦查詢的時候,其實有很多答案雖然錯誤碼是104,但是報錯的原因是不相同的,解決方案也是各不相同,看到過大概以下幾種解決思路
雖然個人試其他解決方式的時候,都沒有成功,也有可能是因為tomcat Connector 聯結器的最大請求頭4K大小的這個預設設定從最基礎的環節直接給把其他設定砍掉了。但是不論使用何種方式解決,最終來說我們就一個思路(雖然說了很像沒說),先找到是哪端沒有將資料讀取完畢,然後想辦法讓它正常讀取
本片文章根據個人發生的實際生產問題,著手解決並且進行問題分析,通過對nginx104的跟蹤,對連線重置的概念有一個更詳細的瞭解。
到此這篇關於Nginx報錯104:Connection reset by peer問題的解決及分析的文章就介紹到這了,更多相關Nginx報錯104:Connection reset by peer內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45