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,加入以下
1 2 3 4 5 6 7 8 9 10 |
#curl update to 7.74 version RUN apt-get purge --auto-remove -y curl libcurl3 \ && wget https://curl.haxx.se/download/curl-7.74.0.tar.gz \ && tar -xzf curl-7.74.0.tar.gz \ && cd curl-7.74.0 \ && ./configure --with-ssl --prefix=/usr \ && make && make install \ && ldconfig \ && cd .. && rm -rf curl-7.74.0 \ && rm -rf /var/lib/apt/lists/* |
重新build完成就可以了