【发布时间】:2013-12-05 01:29:36
【问题描述】:
我正在使用 Amazon Elastic Beanstalk (Nginx 1.4.2 + Passenger 4.0.20 + Ruby 1.9.3) 来部署一个使用服务器发送事件的 sinatra 应用程序。一切都在使用瘦的本地机器上完美运行。但在 AWS Elastic Beanstalk 上,连接会在几毫秒后断开。
服务器代码如下所示:
get '/stream', provides: 'text/event-stream' do
response.headers['X-Accel-Buffering'] = 'no'
stream :keep_open do |out|
settings.connections << out
out.callback { settings.connections.delete(out) }
end
end
在服务器日志中我看到连接超时:
2013/11/20 19:45:46 [info] 9716#0: *35 client closed connection while waiting for request, client: xxx.xxx.xxx.xxx, server: 0.0.0.0:80
在服务器块下尝试了此处建议的 nginx 配置 (EventSource / Server-Sent Events through Nginx),虽然标头响应发生了变化,但它还没有工作。
(我也必须在 Nginx 文件上设置 X-Accell-Buffering,因为它不会采用在服务器代码中设置的设置与 sinatra)
响应头看起来像这样:
HTTP/1.1 200 OK
Content-Type: text/event-stream;charset=utf-8
Date: Wed, 20 Nov 2013 20:03:06 GMT
Server: nginx/1.4.2 + Phusion Passenger 4.0.20
Status: 200 OK
X-Accel-Buffering: no
X-Content-Type-Options: nosniff
X-Powered-By: Phusion Passenger 4.0.20
transfer-encoding: chunked
Connection: keep-alive
有什么想法吗?
提前致谢。
【问题讨论】:
标签: nginx sinatra passenger amazon-elastic-beanstalk server-sent-events