【问题标题】:Rails 4 production assets returning 502 on AWS ELB and nginxRails 4 生产资产在 AWS ELB 和 nginx 上返回 502
【发布时间】:2016-02-21 04:00:16
【问题描述】:

所以我在几个 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 地址编辑] - - [19/Nov/2015:06:04:49 +0000] "GET /assets/application-2386fede65ec2aa6a381b4e3215b6d7278e40c40a9bd5e1c190d0e1d98bafd1d.css HTTP/1.1" 200 1271@"Mozilla"@/ (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,这告诉我它与负载均衡器试图将资产返回给我的方式有关。有人有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails amazon-web-services nginx amazon-ec2 amazon-elb


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      相关资源
      最近更新 更多