在弹性豆茎轨道上的gziped站点地图上进行双重压缩

时间:2016-10-26 14:29:05

标签: ruby-on-rails nginx gzip elastic-beanstalk sitemap

我在AWS弹性beanstalk上运行了一个rails应用程序。对于站点地图生成,我使用的是this sitemap generator gem。我的sitemap.rb文件中的设置非常基本:

SitemapGenerator::Sitemap.default_host = ENV['SERVER_ROOT'] 
SitemapGenerator::Sitemap.create do
   add '/pages/help'
   add '/pages/packing'
   add '/pages/privacy'
   add '/pages/security'
   #...
end 

站点地图由cron作业生成。为了提供站点地图,我在routes.rb

中添加了此规则
match '/sitemap.xml.gz', :to => proc {|env| [200, {}, [File.open(Rails.root.join('public', 'sitemap.xml.gz')).read]] }, via: :get

该文件将被传送到浏览器,但因为它似乎被gzipped两次。解压缩sitemap.xml.gz会导致另一个.gz存档。解压缩将产生正确的sitemap.xml文件。

我做错了吗?导致第二次压缩的原因是什么?我该如何预防?

修改

$ cat /etc/nginx/conf.d/webapp.conf 
upstream my_app {
  server unix:///var/run/puma/my_app.sock;
}

server {
  listen 80;
  server_name _ localhost; # need to listen to localhost for worker tier

  location / {
    proxy_pass http://my_app; # match the name of upstream directive which is defined above
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  location /assets {
    alias /var/app/current/public/assets;
    gzip_static on;
    gzip on;
    expires max;
    add_header Cache-Control public;
  }

  location /public {
    alias /var/app/current/public;
    gzip_static on;
    gzip on;
    expires max;
    add_header Cache-Control public;
  }
}

编辑2

我应该注意到,压缩对于我的Vagrant开发机只运行puma作为网络服务器是正确的。所以它可能确实是Nginx配置。

0 个答案:

没有答案