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

2020年10月28日16:50:04 發表評論 8,418 ℃

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

故障現象:

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

排查過程:

1、上傳圖片只有幾MB可以排除文件大小限制原因導致的失敗。

2、監聽圖片上傳接口服務bms日志,發現上傳接口請求未到此服務。

3、監聽zuul網關日志,未發現異常報錯。

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

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 日志,發現有相關報錯,如下:

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: "m.maowutv.com"

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

于是查看服務器是否有此文件,發現/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: "m.maowutv.com"

根據日志提示Permission denied,得出nginx沒有權限訪問此目錄。

因此賦予nginx訪問此目錄的權限:

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

再次上傳圖片測試,已經正常。

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參數的作用是什么?網上找了資料。主要作用是:

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

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

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

【騰訊云】云服務器、云數據庫、COS、CDN、短信等云產品特惠熱賣中

發表評論

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