Given: 64bit Amazon Linux 2015.09 v2.0.4 running Ruby 2.2 (Passenger Standalone) behind ELB. Rails 4.25 in production with default asset pipeline settings.
Я заметил, что заголовки управления кешем не установлены для статических ресурсов (css, js). Я ожидаю чего-то вроде public, max-age=31557600
или чего-то подобного, но вместо этого получаю следующее:
> curl -I http://xxx.elasticbeanstalk.com/assets/application-7e1554f74fd0352dbb5ccdbba5d50d1c1f28a4ca751e9ec8371bd55e28885f77.css
HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Length: 16557
Content-Type: text/css
Date: Tue, 05 Jan 2016 21:16:53 GMT
ETag: "568bde8a-40ad"
Last-Modified: Tue, 05 Jan 2016 15:17:30 GMT
Server: nginx/1.6.2
Connection: keep-alive
Установка заголовков в Rails и указание ему обслуживать ресурсы через приложение, например
# production.rb
config.static_cache_control = "public, max-age=#{1.year.to_i}"
config.serve_static_files = true
не имеет значения, ресурсы по-прежнему обслуживаются nginx.
В /tmp/passenger-standalone.1d76nuz/config
(хотя не уверен, что это активная конфигурация) я вижу следующее:
server {
...
# Rails asset pipeline support.
location ~ "^/assets/.+-[0-9a-f]{32}\..+" {
error_page 490 = @static_asset;
error_page 491 = @dynamic_request;
recursive_error_pages on;
if (-f $request_filename) {
return 490;
}
if (!-f $request_filename) {
return 491;
}
}
location @static_asset {
gzip_static on;
expires max;
add_header Cache-Control public;
add_header ETag "";
}
location @dynamic_request {
passenger_enabled on;
}
}
Буду признателен за любой совет. Я пытаюсь использовать CloudFront для обслуживания ресурсов, но он намного менее эффективен без правильных заголовков управления кешем.
Спасибо! И счастливого 2016 года!