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;
导致了错误。我不知道它的作用,但我现在太累了,无暇顾及。
所以我在几个 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;
导致了错误。我不知道它的作用,但我现在太累了,无暇顾及。