Назад | Перейти на главную страницу

Конфигурация Apache gzip

У меня на сервере установлен apache 2.2.11, и я пытаюсь уменьшить время загрузки страниц своего веб-сайта, следуя советам плагина yslow для firefox.

Я настроил gzip и etag и некоторые другие предложения в порядке, но я заметил, что в заголовке моих файлов css к etag добавлен текст gzip.

Кто-нибудь знает, почему и как это обойти?

Header from my server
Date    Sun, 07 Jun 2009 10:40:57 GMT
Server  Apache/2.2.11 (Fedora)
Last-Modified   Sun, 31 May 2009 15:06:38 GMT
Etag    "3b4-46b36a802bb80"-gzip
Accept-Ranges   bytes
Cache-Control   max-age=2592000
Expires Tue, 07 Jul 2009 10:40:57 GMT
Vary    Accept-Encoding
Content-Encoding    gzip
Content-Length  530
Connection  close
Content-Type    text/css

Тот же код в моем размещенном пакете использует более старую версию apache и не имеет той же проблемы. Может это просто ошибка apache?

Header from my hosting package
Date    Sun, 07 Jun 2009 10:48:26 GMT
Server  Apache/2.0.63 (FreeBSD) mod_python/3.3.1 Python/2.5.1 PHP/5.2.6 with Suhosin-Patch mod_fastcgi/2.4.6 mod_ssl/2.0.63 OpenSSL/0.9.7e-p1 DAV/2 mod_perl/2.0.4 Perl/v5.8.8
Last-Modified   Sat, 21 Feb 2009 13:54:52 GMT
Etag    "3b4-1d104300"
Accept-Ranges   bytes
Cache-Control   max-age=2592000
Expires Tue, 07 Jul 2009 10:48:26 GMT
Vary    Accept-Encoding
Content-Encoding    gzip
Content-Length  530
Connection  close
Content-Type    text/css

Вот идеальный .htaccess, который сжимает и устанавливает подходящие заголовки с истекшим сроком действия.

# Insert filter
SetOutputFilter DEFLATE

# Netscape 4.x has some problems...
BrowserMatch ^Mozilla/4 gzip-only-text/html

# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip

# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType image/x-icon "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 604800 seconds"
  ExpiresByType text/javascript "access plus 216000 seconds"
  ExpiresByType application/x-javascript "access plus 216000 seconds"
  ExpiresByType text/html "access plus 600 seconds"
  ExpiresByType application/xhtml+xml "access plus 600 seconds"
</IfModule>

<IfModule mod_headers.c>
  <FilesMatch "\\.(ico|jpe?g|png|gif|swf)$">
    Header set Cache-Control "max-age=2592000, public"
  </FilesMatch>
  <FilesMatch "\\.(css)$">
    Header set Cache-Control "max-age=604800, public"
  </FilesMatch>
  <FilesMatch "\\.(js)$">
    Header set Cache-Control "max-age=216000, private"
  </FilesMatch>
  <FilesMatch "\\.(x?html?|php)$">
    Header set Cache-Control "max-age=600, private, must-revalidate"
  </FilesMatch>
</IfModule>

<IfModule mod_headers.c>
  Header unset ETag
</IfModule>
FileETag None

<IfModule mod_headers.c>
  Header unset Last-Modified
</IfModule>

В следующей статье рассказывается, что он делает, а также говорится о сжатии:

http://www.samaxes.com/2009/01/06/more-on-compressing-and-caching-your-site-with-htaccess/

Надеюсь, это поможет.

Apache mod_deflate создает уникальный Etag для каждой сущности, поскольку они идентифицируют конкретный вариант сущности URL. Каждый согласованный вариант должен иметь уникальный ETag: s. Для mod_deflate это так же просто, как добавить кодировку к уже вычисленному ETag.

Один из способов решения проблемы - удалить кодировку из Etag:

<Location /js>
  RequestHeader  edit "If-None-Match" "^(.*)-gzip$" "$1"
  Header  edit "ETag" "^(.*[^g][^z][^i][^p])$" "$1-gzip"
</Location>

Если вы используете Apache 2.5 с mod_deflate модуль, вы можете использовать директиву DeflateAlterETag to указывает, как должен быть изменен хадер ETag при сжатии ответа.

DeflateAlterETag AddSuffix|NoChange|Remove

Источник: https://httpd.apache.org/docs/trunk/mod/mod_deflate.html#deflatealteretag

это Сообщение блога предлагают полностью удалить Etags и полагаться на Cache-Control заголовок.

Сделать это в httpd.conf:

<IfModule mod_headers.c>
    Header unset ETag
</IfModule>

FileETag None

Обратите внимание: если объекты gzip: ed by mod_deflate по-прежнему содержит тот же ETag, что и обычный объект, это может вызвать несогласованность в кэшах прокси, поддерживающих ETag.

Больше информации здесь:

Не могли бы вы рассказать, как вы настроили gzip? Например, вы используете mod_deflate? Можете ли вы публиковать фрагменты из вашего httpd.conf, особенно поле AddOutputFilterByType? Я следовал этим инструкциям для своего конкретного хостинг-провайдера, и возможно, что text / css нет в списке у вашего хостинг-провайдера:

http://kb.mediatemple.net/questions/1567/Compressing+web+pages+with+mod_deflate