乘客 3.0.17 + nginx 1.2.4 + "Content-Length" 标头 = 502 错误的网关



我刚刚遇到了一个问题,即在Rails 3.2.2应用程序中设置response.headers['Content-Length']会导致Nginx抛出"502 Bad Gateway"错误。

我在控制器中有一个操作,该操作使用 send_data 方法来发送变量中包含的原始 JPEG 数据。 以前,我遇到了一些浏览器没有下载正在发送的整个图像的问题,并发现没有发送Content-Length标头,因此我决定使用包含JPEG数据的变量的.bytesize属性作为Content-Length。

这在开发中工作正常(使用独角兽),现在有一个内容长度标头,以前没有,但在我使用 Nginx 和 Passenger 的生产中,我得到了上述 502 Bad Gateway。 另外,在Nginx错误日志中,我看到:

[error] 30574#0: *1686 upstream prematurely closed connection while reading response header from upstream

Rails 生产日志中没有匹配的条目,这告诉我应用程序很好。

我已经注释掉了设置内容长度标题的行,问题消失了。 我仍在测试我是否真的需要发送内容长度标头,但与此同时,我想我可能会出于好奇发布这个,看看是否有人有任何想法。

啊哈! 我必须通过添加 .to_s 方法将大小转换为字符串。 所以,我的最终结果是

response.headers['Content-Length'] = photo_data.bytesize.to_s
send_data photo_data, :type => :jpg, :filename => 'file_name.jpg', :disposition => 'attachment'

因此,似乎可以在 Nginx/Passenger 上发送 Content-Length 标头,但如果它不是明确的字符串,乘客就会阻塞。

相关内容

  • 没有找到相关文章

最新更新