Nginx -413-上傳檔案太大
nginx裡請求預設最大size為1M。 是以當上傳檔案的大小超過1M的時候會出現錯誤 http response code:413 REQUEST_ENTITY_TOO_LARGE 上傳檔案太大。
問題及方案
一開始我隻設定client_max_body_size:50m, 錯誤“REQUEST_ENTITY_TOO_LARGE 上傳檔案太大 ”沒有了,但是上傳檔案時有開始報 “ Failed to load resource: net: ERR_CONNECTION_RESET”,連接配接被重置了,我猜測連接配接因為什麼原因被重置了, 是以我調大了指令keepalive_timeout的值為 650, 然後再上傳大檔案就可以了, 但是第二天有出現了 “ Failed to load resource: net: ERR_CONNECTION_RESET”, 參考https://www.cnblogs.com/kikyoqiang/p/16878961.html 博文, 添加了指令:
send_timeout 650
(指定nginx發送response 給client的逾時時間), 測試了上傳15M的資料可以了,之後上傳檔案就可以了。
最後nginx的配置如下
nginx支援大檔案上傳的配置:
http {
keepalive_timeout 650; # 用戶端和nginx是長連接配接,
client_body_timeout 600;
send_timeout 650;
proxy_connect_timeout 60s; # nginx到背景server的連接配接的逾時時間
proxy_read_timeout 1m; # nginx從背景server的讀資料的逾時時間
proxy_send_timeout 1m; # nginx發送資料到背景server發送時間
client_max_body_size 50m; #請求體的門檻值
client_body_buffer_size 500m; #Buffer的大小
client_body_temp_path /usr/local/nginx/client_body_temp 5 5; #如果buffer用完了,則把上傳的資料寫到client_body_temp_path指令配置的路徑
}
參數說明:
- client_max_body_size 50m; 指定請求體的大小門檻值 改完request body大小為50m
keepalive_timeout 650 650 指令的第一個值指定用戶端到web server的連接配接逾時時間,如果是0,連接配接為短連接配接; 第二個值為:在response header 添加一個參數“ “Keep-Alive: timeout=650””
The first parameter sets a timeout during which a keep-alive client connection will stay open on the server side. The zero value disables keep-alive client connections.
- send_timeout nginx發送response 到client的逾時時間
但是還有一點需要注意,過來nginx這一關,請求就進入到application server,如tomcat,在tomcat 或者 spring web mvc裡對上傳檔案的大小也有設定, 如果逾時指定的門檻值,仍讓會報錯。
Spring Boot裡上傳檔案的配置
在spring boot裡指定上傳檔案大小門檻值的配置如下:
spring:
servlet:
multipart:
location: /data/temp #保持上傳圖檔的臨時路徑
enabled: true
max-file-size: 20 #最大檔案的size
max-request-size: 30 #最大請求的size