在工作中,经常需要用到大名鼎鼎的 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;
}
}
}