Как настроить mod_deflate для обслуживания gzipped-активов, подготовленных с использованием активов: precompile
При запуске активов: прекомпиляция рейк-задачи, создаются gzipped-версии ваших активов приложения. В соответствии с руководством Rails для конвейера активов вы можете настроить свой веб-сервер (в моем случае Apache 2.2) для обслуживания этих предварительно сжатых файлов вместо того, чтобы веб-сервер выполнял работу.
Что я не могу понять, так это то, как настроить mod_deflate так, чтобы эти файлы были поданы вместо того, чтобы быть сдвоенным и затем обслуживаться?
У меня mod_deflate включен через httpd.conf:
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
И я преобразовал код в направляющие рельсов, чтобы перейти в .htaccess в public/assets:
# Some browsers still send conditional-GET requests if there a
# Last-Modified header or an ETag header even if they haven't
# reached the expiry date sent in the Expires header.
Header unset Last-Modified
Header unset ETag
FileETag None
# RFC says only cache for 1 year
ExpiresActive On
ExpiresDefault "access plus 1 year"
# Serve gzipped versions instead of requiring Apache to do the work
RewriteEngine on
RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.+) $1.gz [L]
# without it, Content-Type will be "application/x-gzip"
<FilesMatch .*\.css.gz>
ForceType text/css
</FilesMatch>
<FilesMatch .*\.js.gz>
ForceType text/javascript
</FilesMatch>
Любые идеи по правильному настройке?
Ответы
Ответ 1
Во-первых, вы не хотите, чтобы mod_deflate работал здесь. Итак, в вашем файле .htaccess добавьте:
SetEnv no-gzip
Это должно отключить mod_deflate для ваших активов.
Во-вторых, я не согласен с рельсами, но я думаю, что есть пара недостатков в их активах .htaccess recipe. Верхняя часть отлично, но для RewriteEngine и за ее пределами:
RewriteEngine on
# Make sure the browser supports gzip encoding before we send it
RewriteCond %{HTTP:Accept-Encoding} \b(x-)?gzip\b
RewriteCond %{REQUEST_URI} .*\.(css|js)
RewriteCond %{REQUEST_FILENAME}.gz -s
RewriteRule ^(.+) $1.gz [L]
# without it, Content-Type will be "application/x-gzip"
# also add a content-encoding header to tell the browser to decompress
<FilesMatch \.css\.gz$>
ForceType text/css
Header set Content-Encoding gzip
</FilesMatch>
<FilesMatch \.js\.gz$>
ForceType application/javascript
Header set Content-Encoding gzip
</FilesMatch>