我正在运行 nginx/ruby-on-rails,并且有一个简单的多部分表单来上传文件。
一切正常,直到我决定限制要上传的文件的最大大小。
为此,我设置了 nginxclient_max_body_size
to 1m(1MB),并且当该规则被破坏时,预计会出现 HTTP 413(请求实体太大)状态响应。
问题问题是,当我上传 1.2 MB 文件时,浏览器没有显示 HTTP 413 错误页面,而是挂起一段时间,然后终止并显示“页面加载时连接已重置”消息。
我已经尝试了 nginx 提供的几乎所有选项,但似乎没有任何效果。有人对此有什么想法吗?
这是我的 nginx.conf:
worker_processes 1;
timer_resolution 1000ms;
events {
worker_connections 1024;
}
http {
passenger_root /the_passenger_root;
passenger_ruby /the_ruby;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.x.com;
client_max_body_size 1M;
passenger_use_global_queue on;
root /the_root;
passenger_enabled on;
error_page 404 /404.html;
error_page 413 /413.html;
}
}
Thanks.
**Edit**
环境/UA:Windows XP/Firefox 3.6.13
当客户端通知 nginx 将发送比实际大小更大的正文时,nginx 会“快速失败”client_max_body_size
通过发送 413 响应并关闭连接。
大多数客户端在发送整个请求正文之前不会读取响应。由于 nginx 关闭了连接,客户端将数据发送到关闭的套接字,从而导致 TCP RST。
如果您的 HTTP 客户端支持,处理此问题的最佳方法是发送Expect: 100-Continue
标头。 Nginx 从 1.2.7 开始正确支持这一点,并将回复413 Request Entity Too Large
响应而不是100 Continue
if Content-Length
超过最大体型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)