在工作中,经常需要用到大名鼎鼎的 nginx 服务器实现反向代理。
当我们通过 nginx 代理的 HTTP 服务上传大文件时,如果抛出“413 Request Entity Too Large”错误,则说明我们上传的文件太大(nginx 默认允许文件上传的大小为 1M)。这就需要修改 nginx 配置文件,调整上传文件大小限制。
在 nginx 中,调整上传文件只需要配置如下参数:
client_max_body_size:表示客户端请求服务器最大允许大小
client_body_buffer_size:表示 nginx 分配给请求数据的 Buffer 大小
client_max_body_size 默认 1M,表示客户端请求服务器最大允许大小,在 "Content-Length" 请求头中指定。如果请求的正文数据大于 client_max_body_size,HTTP 协议会报错 413 Request Entity Too Large。就是说如果请求的正文大client_max_body_size,一定是失败的。如果需要上传大文件,一定要修改该值。
nginx 分配给请求数据的 Buffer 大小,如果请求的数据小于 client_body_buffer_size 直接将数据先在内存中存储。如果请求的值大于 client_body_buffer_size 小于 client_max_body_size,就会将数据先存储到临时文件中,在哪个临时文件中呢?
client_body_temp 指定的路径中,默认该路径值是 /tmp/。
所以配置的 client_body_temp 地址,一定让执行的 nginx 的用户组有读写权限。否则,当传输的数据大于 client_body_buffer_size,写进临时文件失败会报错。
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; server { listen 8080; server_name localhost; # 修改文件大小限制为 50m,默认1m client_max_body_size 50m; # 修改分配给请求数据的 Buffer 大小为 1m client_body_buffer_size 1m; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }