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

Мод Debian Apache Deflate не работает

У меня apache 2.2.22 работает на debian.

Я попытался включить выкачивание на этом сервере, но что бы я ни делал, ответ не сдувается.

Вот список включенных модулей:

apache2ctl -M
Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 version_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
 auth_basic_module (shared)
 authn_file_module (shared)
 authz_default_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 expires_module (shared)
 filter_module (shared)
 headers_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 pagespeed_module (shared)
 php5_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 status_module (shared)
Syntax OK

Вот мой виртуальный хост:

<VirtualHost 148.251.236.145:80>

  ServerName                    www.tren.at
  ServerAlias                   tren.at *.tren.at
  ServerAdmin                   webmaster@tren.at
  DocumentRoot                  /var/www/tren
  ServerSignature               on
  LogLevel                      info
  ErrorLog                      /var/log/apache2/error-tren.log
  CustomLog                     /var/log/apache2/access-tren.log combined
  RewriteLog            /var/log/apache2/rewrite-tren.log
  RewriteLogLevel       3
  AllowEncodedSlashes       on

 <Directory /var/www/tren/>
  Options                       Indexes FollowSymLinks MultiViews
  AllowOverride                 all
  Order                         allow,deny
  Allow from                    all
  DirectoryIndex                index.php
 </Directory>

 <Directory /var/www/tren/images/>
  <FilesMatch "(?i)\.((?!.*(jpg|jpeg|png|gif|bmp)).*)$">
    Order Deny,Allow
    Deny from All
  </FilesMatch>
 </Directory>

 <Directory /var/www/tren/cache/>
  <FilesMatch "(?i)\.((?!.*(jpg|jpeg|png|gif|bmp)).*)$">
    Order Deny,Allow
    Deny from All
  </FilesMatch>
 </Directory>

</VirtualHost>

И наконец мой .htaccess

Options -MultiViews
Options +FollowSymLinks

# Enable GZIP
<IfModule mod_deflate.c>
  # HTML, TXT, CSS, JavaScript, JSON, XML, HTC:
  <IfModule filter_module>
    FilterDeclare   COMPRESS
    FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/html
    FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/css
    FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/plain
    FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/xml
    FilterProvider  COMPRESS  DEFLATE resp=Content-Type $text/x-component
    FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/javascript
    FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/json
    FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/xml
    FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/xhtml+xml
    FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/rss+xml
    FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/atom+xml
    FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/vnd.ms-fontobject
    FilterProvider  COMPRESS  DEFLATE resp=Content-Type $image/svg+xml
    FilterProvider  COMPRESS  DEFLATE resp=Content-Type $application/x-font-ttf
    FilterProvider  COMPRESS  DEFLATE resp=Content-Type $font/opentype
    FilterChain     COMPRESS
    FilterProtocol  COMPRESS  DEFLATE change=yes;byteranges=no
  </IfModule>

  <IfModule !mod_filter.c>
    # Legacy versions of Apache
    AddOutputFilterByType DEFLATE text/html text/plain text/css application/json
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE text/xml application/xml text/x-component
    AddOutputFilterByType DEFLATE application/xhtml+xml application/rss+xml 
    AddOutputFilterByType DEFLATE application/atom+xml
    AddOutputFilterByType DEFLATE image/svg+xml application/vnd.ms-fontobject 
    AddOutputFilterByType DEFLATE application/x-font-ttf font/opentype
  </IfModule>
</IfModule>

# Expires Headers - 2678400s = 31 days
<ifmodule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType text/html "access plus 7200 seconds"
  ExpiresByType image/gif "access plus 2678400 seconds"
  ExpiresByType image/jpeg "access plus 2678400 seconds"
  ExpiresByType image/png "access plus 2678400 seconds"
  ExpiresByType text/css "access plus 518400 seconds"
  ExpiresByType text/javascript "access plus 2678400 seconds"
  ExpiresByType application/x-javascript "access plus 2678400 seconds"
</ifmodule>

# Cache Headers
<ifmodule mod_headers.c>
  # Cache specified files for 31 days
  <filesmatch "\.(ico|flv|jpg|jpeg|png|gif|css|swf)$">
  Header set Cache-Control "max-age=2678400, public"
  </filesmatch>
  # Cache HTML files for a couple hours
  <filesmatch "\.(html|htm)$">
  Header set Cache-Control "max-age=7200, private, must-revalidate"
  </filesmatch>
  # Cache PDFs for a day
  <filesmatch "\.(pdf)$">
  Header set Cache-Control "max-age=86400, public"
  </filesmatch>
  # Cache Javascripts for 31 days
  <filesmatch "\.(js)$">
  Header set Cache-Control "max-age=2678400, private"
  </filesmatch>
</ifmodule>

RewriteEngine on

RewriteBase /

RewriteRule . - [E=no-gzip:1]

RewriteRule ^(.*)/product/([0-9]+)/(.*)$ product_info.php/products_id/$2/$3 [QSA,L]

RewriteRule ^(.*)/product/([0-9]+)$ product_info.php?products_id=$2 [QSA,L]

RewriteRule ^(.*)/cat/([0-9,_]+)/(.*)$ index.php/cPath/$2/$3 [QSA,L]

RewriteRule ^(.*)/cat/([0-9,_]+)$ index.php?cPath=$2 [QSA,L]


## Redirect to www
#
RewriteCond %{http_host} ^tren.at [nc]

RewriteRule ^(.*)$ http://www.tren.at/$1 [r=301,nc]

Если я сейчас попытаюсь получить с сайта простой html-файл, он не сжимается. То же самое происходит с выводом php:

curl --compressed -I http://www.tren.at/test.html
HTTP/1.1 200 OK
Date: Wed, 22 Apr 2015 10:37:57 GMT
Server: Apache/2.2.22 (Debian)
Last-Modified: Wed, 12 Nov 2014 10:34:38 GMT
Accept-Ranges: none
Cache-Control: max-age=7200, private, must-revalidate
Expires: Wed, 22 Apr 2015 12:37:57 GMT
Content-Length: 322
Content-Type: text/html

Я уже отключил output_buffering и zlib.output_compression в php.ini.

Где-то в моей конфигурации есть ошибка? Что еще я могу попытаться найти / исправить?

РЕДАКТИРОВАТЬ:

Интересно, что когда я допустил синтаксическую ошибку в своей конфигурации, полученная мной ошибка 500 была сжата с помощью gzip!

У меня есть следующее, которое работает и сильно отличается от вашего. Что, если вы упростите конфигурацию примерно так?

SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript application/javascript

Также не забудьте использовать Vary: Accept-Encoding и не Vary: User-Agent если можно этого избежать. Вы также можете настроить входящие Accept-Encoding заголовки запроса до того, как они попадут в ваш кеш (если он у вас есть). В противном случае вы получите действительно мусорную частоту попаданий в кеш, потому что вы будете кэшировать более 40 различных представлений для всех различных методов сжатия и всех различных строк пользовательского агента.

Вот что я бы поставил на обратный прокси, чтобы реализовать это.

# Edit incoming request header Accept-Encoding in order
# to get greater cache utilisation and less disk utilisation. Otherwise we
# end up with a lot of (potentially different) encodings; one for each unique
# Accept-Encoding header... there would be over 50; including very unusual
# ones.
#
# This pair of regular expressions implements a two-part transform which:
#  1) for any Accept-Encoding header which has gzip, makes it the only value,
#     plus adds a dummy value to remind log-observers that it has been edited.
#  2) then, it will replace any Accept-Encoding that did not mention gzip,
#     clears it out. mod_deflate only supports gzip anyway (despite the name)
#
# I was afraid that this would have to run as an 'early' handler, and perhaps
# on older versions of Apache 2.2, perhaps that would be the case; but at least
# for httpd-2.2.3-91.el5 on RHEL 5, this is not the case. I think there was
# some talk of making the caching not and early module... but I believe the
# documentation still refers to it as an early module.
#
RequestHeader edit Accept-Encoding "^(?:.*,?\s*)?\b(gzip)\b(?:,.*)?$" "$1, MASHED"
RequestHeader edit Accept-Encoding "^(?!.*\bgzip\b.*).*$" "$1"

MASHED в значительной степени предназначен для меня как напоминание о том, что заголовок был отредактирован.

Виновником было правило в моде перезаписи:

RewriteRule . - [E=no-gzip:1]

Это была часть старой конфигурации, о которой я забыл.