所以我在几个AWS EC2实例上有一个Rails生产应用程序,由AWS弹性负载均衡器负载均衡。 EC2实例通过nginx和乘客为Rails应用程序提供服务。
我的DNS指向负载均衡器,一切正常,但我的CSS / JS /资产没有被提供。我将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,与Gecko一样)Chrome / 46.0.2490.86 Safari / 537.36"
它看起来很好。
我检查了我的Rails日志,它没有任何资产或502相关。
我有一个单独的实例,其DNS记录直接指向IP地址而不是AWS ELB,这告诉我它与负载均衡器尝试将资产返回给我的方式有关。有人有什么想法吗?
答案 0 :(得分:2)
经过10个小时的反复试验,我发现了启用了nginx网站的配置文件中的罪魁祸首:
location ^~ /assets/ {
gzip_static on;
expires max;
add_header Cache-Control public;
}
此行:add_header Cache-Control public;
导致错误。我不知道它做了什么,但我现在太累了,无法照顾。