【发布时间】:2010-09-14 07:34:36
【问题描述】:
我在 nginx 后面有一个 Mongrel 集群,我试图让 nginx 使用以下规则(RESTful URL)提供我网站的静态内容:
location / {
if (-f $request_filename) {
break;
}
if (!-f $request_filename) {
proxy_pass http://mycluster$request_uri;
break;
}
}
当我加载一个包含图像的页面(从 /public/images 引用)时,对图像的请求会永远挂起(对于 JS、CSS 等也是如此)。但是,如果我直接转到图像 URL(右键单击,“查看图像”),所有文件都会按预期提供 - 如果我关闭 Mongrel 集群,它们将继续提供。所以nginx可以清楚的看到和访问所有的静态文件。此外,在加载页面时查看萤火虫时,我可以看到正在对某些文件发出双重请求(并不总是相同的文件!),有时其中一个请求正确提供,而另一个请求将无限期挂起。
如果我更改规则以将所有内容重定向到我的集群,则所有静态数据都可以正常服务 - 与我直接转到其中一个 Mongrels 的结果完全相同:
location / {
proxy_pass http://mycluster$request_uri;
}
这当然不是一个选项,因为我非常希望 nginix 来提供此内容。另一个奇怪的事情是文件似乎确实被发送了。例如,当悬停在从未完成的请求上时,我可以在 firebug 中看到图像。我对 nginix 很陌生,所以很可能我错过了一些明显的东西——我已经尽力自己找到答案,但我真的可以得到一些帮助!
非常感谢,
JS
附:会不会是 nginx 和 Mongrel 在谁应该提供文件的问题上发生冲突?
【问题讨论】:
标签: ruby-on-rails proxy nginx