我的本地开发服务器因文件上传过大而返回状态 413,并且客户端立即收到这些文件 - 正如我所要求的。
我的远程服务器是同一版本的 Nginx,并且配置也大致相同,但 413 从未到达浏览器。
错误日志中立即出现一个指示数据过大的错误,而访问日志中没有任何内容。浏览器继续发送数据,30 秒后,访问日志中出现 413 状态(错误日志中再次出现),浏览器超时并出现内部“连接重置”错误。
远程服务器上的哪些配置可能会导致这种延迟?
答案1
问题是,大多数 HTTP 客户端在发送整个请求主体之前不会读取响应。如果你使用的是 Web 浏览器,那么你可能就没那么幸运了。你唯一可以做的服务器端配置是设置keepalive_requests
设置为 0(禁用持久连接),这可能会使 nginx 在发送 413 后关闭连接,从而导致客户端停止发送数据。但是,客户端可能会报告网络错误而不是 413。
答案2
我猜浏览器必须完成上传,然后才会收到 413 错误。检查文件大小的最佳方法是在点击上传按钮之前在 JS 中检查它。