Nginx上傳圖片500錯誤解決辦法

2020年10月28日16:50:04 發(fā)表評論 8,123 ℃

今天遇到一個nginx問題導(dǎo)致上傳圖片失敗,報500錯誤的經(jīng)典問題,因為這個原因相比于以前遇到的,超過大小限制、文件傳輸超時、圖片接口服務(wù)端異常等原因都不一樣,所以阿湯博客這里分享給大家,如果有遇到Nginx上傳圖片報500錯誤,可以參考排查一下。

故障現(xiàn)象:

開發(fā)反饋,突然通過手機APP上傳圖片不成功,返回500錯誤,之前一直上傳正常。

排查過程:

1、上傳圖片只有幾MB可以排除文件大小限制原因?qū)е碌氖 ?/p>

2、監(jiān)聽圖片上傳接口服務(wù)bms日志,發(fā)現(xiàn)上傳接口請求未到此服務(wù)。

3、監(jiān)聽zuul網(wǎng)關(guān)日志,未發(fā)現(xiàn)異常報錯。

4、通過網(wǎng)頁端其他圖片上傳接口,上傳測試正常,所有日志輸出也正常。

5、此時懷疑是nginx方面的問題,查看nginx access訪問日志,訪問返回500錯誤,如下:

100.117.132.173 - - [28/Oct/2020:15:36:09 +0800] "POST /bms/images/uploadImg HTTP/1.1" 500 186 "-" "okhttp/3.14.4"

6、查看nginx error 日志,發(fā)現(xiàn)有相關(guān)報錯,如下:

2020/10/28 15:36:09 [crit] 16719#0: *107060 open() "/var/tmp/nginx/client//0000000563" failed (2: No such file or directory), client: 100.117.132.173, server: localhost, request: "POST /bms/images/uploadImg HTTP/1.1", host: "www.zhongjima.net"

日志已經(jīng)說清楚:open() "/var/tmp/nginx/client//0000000563" failed (2: No such file or directory),訪問"/var/tmp/nginx/client//0000000563" 文件失敗,這個文件不存在。

于是查看服務(wù)器是否有此文件,發(fā)現(xiàn)/var/tmp/nginx/client目錄不存在。

因此新建文件:

# mkdir -pv /var/tmp/nginx/client

然后再上傳圖片測試,此時日志報錯:

2020/10/28 15:38:51 [crit] 16720#0: *107062 open() "/var/tmp/nginx/client//0000000565" failed (13: Permission denied), client: 100.117.132.130, server: localhost, request: "POST /bms/images/uploadImg HTTP/1.1", host: "www.zhongjima.net"

根據(jù)日志提示Permission denied,得出nginx沒有權(quán)限訪問此目錄。

因此賦予nginx訪問此目錄的權(quán)限:

# chown nginx.nginx -R /var/tmp/nginx/

再次上傳圖片測試,已經(jīng)正常。

100.117.132.162  - - [28/Oct/2020:15:39:58 +0800] "POST /bms/image/uploadImg HTTP/1.1" 200 140 "-" "okhttp/3.14.4"

/var/tmp/nginx/client/是什么文件夾?

查看nginx編譯配置,--http-client-body-temp-path=/var/tmp/nginx/client/,此目錄是自己在編譯安裝nginx時,自己配置的。

那client-body-temp-path參數(shù)的作用是什么?網(wǎng)上找了資料。主要作用是:

為存儲客戶端請求的臨時文件存儲目錄,用于接收客戶端請求報文的body部分的緩沖區(qū)大小;默認(rèn)為16k;超出此大小時,其將被暫存到磁盤上的由client_body_temp_path指令所定義的位置。

查看我的nginx配置文件,配置為client_body_buffer_size 128k;所以當(dāng)圖片超過128kb時,就會將文件暫存到/var/tmp/nginx/client/目錄。

而剛才通過網(wǎng)頁上傳圖片,為什么能成功?此時再去查看是因為上傳的圖片只有75kb。

【騰訊云】云服務(wù)器、云數(shù)據(jù)庫、COS、CDN、短信等云產(chǎn)品特惠熱賣中

發(fā)表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: