在服务器上部署了一套使用 Nginx 反向代理 Tomcat 的后台环境,当上传一个 70M 的视频文件时,上传过程在中途失败。原因是 Nginx 配置中限制了上传文件的大小。
解决方案
1. Nginx 上传文件大小限制
在 Nginx 配置文件中,client_max_body_size
参数用于限制上传文件的大小。该参数可以在 http
、server
或 location
区块中配置。
示例配置:
http {
client_max_body_size 100M; # 限制文件上传大小为 100M
}
2. Tomcat 超时时间配置
在 Tomcat 的 server.xml
配置文件中,connectionTimeout
参数用于设置请求的超时时间,默认值为 20000 毫秒(20 秒),可以适当调大,例如改为 60000 毫秒(60 秒)。
示例配置:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="60000"
redirectPort="8443" />
3. Nginx 代理请求超时时间
Nginx 中可以通过以下配置调整代理请求的超时时间:
proxy_connect_timeout
:与后端服务器建立连接的超时时间。proxy_read_timeout
:从后端服务器读取响应的超时时间。proxy_send_timeout
:向后端服务器发送请求的超时时间。
参考配置:
location / {
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
...
}
详细配置说明可参考 Nginx 官方文档。
4. Nginx keepalive_timeout
配置
keepalive_timeout
是 Nginx 中的 HTTP 连接超时设置,用于指定客户端与服务器之间的连接在设定时间内保持有效。
**注意:**该参数不宜设置过大,否则可能导致连接数过多,占用大量无效资源,甚至导致 Nginx 崩溃。例如,超大的 keepalive_timeout
设置可能会在连接数达到 worker_connections
限制时触发错误 socket() failed (24: Too many open files) while connecting to upstream
。
合理的 keepalive_timeout
配置示例:
http {
keepalive_timeout 15s; # 设置为 15 秒
}
5. PHP 上传大小限制
在 PHP 的 php.ini
配置文件中,有多个参数影响上传文件的大小:
; 设置脚本允许的最大内存分配
memory_limit = 32M
; 设置上传文件的最大大小
upload_max_filesize = 8M
; 设置允许的 POST 数据最大值,必须大于 upload_max_filesize
post_max_size = 16M
总结
- Nginx 的
client_max_body_size
用于限制上传文件的大小。 - Tomcat 的
connectionTimeout
可以适当调大以防止超时。 - Nginx 的
keepalive_timeout
参数应合理设置,避免资源无效占用。 - PHP 的
upload_max_filesize
和post_max_size
参数需要配置以支持更大的上传文件。
合理配置这些参数后,可以解决上传文件大小和请求超时的问题,确保系统稳定运行。