天天看點

Nginx -413-上傳檔案太大Nginx -413-上傳檔案太大

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
           

繼續閱讀