为什么当nginx被用作代理时,Rails中间件开销如此之高?

感谢Godfrey Chan对我从他那里得到的有益的见解。 他指出,有一个Rack中间件可以为响应中的X-Runtime HTTP报头中的整个Rails请求提供更准确的时间,与日志中报告的时间相比(Completed in XXXms … )。

以下是我从testing中得到的结果:

1 – 在Chrome中访问直接链接到Rails操作:

  • X-Runtime:25ms
  • Chrome“等待”时间:27ms
  • 在Rails日志格式中报告的时间:在7ms内完成200 OK(查看:0.9ms |续集:3.0ms)

2 – 访问相同的URL,但在Chrome中使用带有proxy_pass的nginx

  • X-Runtime:84ms
  • Chrome“等待”时间:88ms
  • 7ms完成200 OK(查看:0.8ms |续集:2.9ms)

3 – 从Chrome的开发者工具复制Curl地址并用curl运行它-I:

  • X-Runtime:105ms(有时达到400ms)
  • 在88ms内完成200行(查看:2.0ms |续集:5.5ms)

当我尝试很多次时,这些时间都非常一致。

任何想法,如果通过nginx proxy_pass,Rails将花费更长的时间来提供相同的请求? 我知道Curl不能利用像keep-alive这样的function,但是我相信nginx能够获得它的优势。 但无论如何,打开连接的时间不应该被X-Runtime头部考虑在内,对吧?

我再也不能复制这个问题了,所以不要介意去查看它,除非你自己复制它并给我们提供更多的细节来调查它。