Rails 4 个生产资产在 AWS ELB 和 nginx 上返回 502

Rails 4 production assets returning 502 on AWS ELB and nginx

所以我在几个 AWS EC2 实例上有一个 Rails 生产应用程序,这些实例由 AWS 弹性负载均衡器进行负载均衡。 EC2 实例通过 nginx 和 passenger 为 Rails 应用程序提供服务。

我的 DNS 指向负载均衡器,一切正常,只是我的 CSS/JS/assets 没有得到服务。我将 serve_static_files 设置为 false 让 nginx 处理它,并且我已经使用 RAILS_ENV=production rake assets:precompile 预编译了我的资产。当我检查 chrome 上的资产时,它说有一个 502 Gateway Error。如果我尝试用我的网络浏览器直接点击资产,我什么也看不到,仍然是 502.

我检查了我的 nginx 错误日志,没有显示 502 错误。

我检查了我的 nginx 访问日志:

[ip address redacted] - - [19/Nov/2015:06:04:49 +0000] "GET /assets/application-2386fede65ec2aa6a381b4e3215b6d7278e40c40a9bd5e1c190d0e1d98bafd1d.css HTTP/1.1" 200 12717 "http://admin.somedomain.com/login" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36"

看起来不错。

我检查了我的 Rails 日志,它没有任何资产或 502 相关。

我有一个单独的实例,其 DNS 记录直接指向 IP 地址而不是 AWS ELB,这告诉我它与负载均衡器尝试 return 资产的方式有关大部头书。有人有什么想法吗?

经过 10 小时的反复试验,我在启用 nginx 站点的配置文件中找到了罪魁祸首:

location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
}

这一行:add_header Cache-Control public; 导致了错误。我不知道它的作用,但我现在太累了,无暇顾及。