PHP cURL post HTTPS recv() failed (104: Connection reset by peer) 錯誤處理

這是這兩天無意間遇到的問題,因為在測試MUX API發現資料一直送不出去

不知道什麼是MUX ? 可以先看這篇 Laravel video upload streaming 影片上傳以及編碼解決方案 MUX

但是其實MUX不重要,只是剛好我卡在這個API而已

一直以來都有用php curl, guzzleHTTP, Laravel Http Client 跟其他API溝通傳遞資料的經驗,不曾遇到出這樣的錯誤訊息

recv()錯誤是由Nginx丟出來了,目前的開發環境是架構在docker-compose底下,經由Nginx pass 到php-fpm container

所以,遇上這個問題我一直都認為是Nginx 或者php.ini內的設定值修改後就可以排除

也google到很多解法,概念都是php-fpm中斷執行導致Nginx找不到可以byPass的地方,所以延長php-fpm執行時間就可以解決

解決方案 :

更新php curl 版本

會發現更新版本後就能解決也是意外,因為已經卡了好幾天沒有解法了才想說不然試試看新的Laravel 9 + PHP 8.1.4環境試試看

沒想到直接過關,觀察curl版本發現,php-fpm 8.1.4版的docker image安裝的是curl 7.74.0

而我原本在pfp-fpm 7.4.16版的docker image中安裝的是7.64.0,其實也才差0.1版本

安裝新版curl :

本次安裝的環境是重新build php-fpm 7.4.16 image,加入以下

重新build完成就可以了