O mod do Debian Apache Deflate não funciona

1

Eu tenho o apache 2.2.22 em execução no debian.

Eu tentei ativar o deflate neste servidor, mas não importa o que eu faça, a resposta não está sendo esvaziada.

Aqui está a lista de módulos ativados:

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

Aqui está meu host virtual:

<VirtualHost 148.251.236.145:80>

  ServerName                    www.tren.at
  ServerAlias                   tren.at *.tren.at
  ServerAdmin                   [email protected]
  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>

E finalmente aqui está o meu .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]

Se eu agora tentar obter um arquivo html simples do site, ele não está sendo compactado. O mesmo acontece com a saída do 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

Eu já desabilitei output_buffering e zlib.output_compression no php.ini.

Existe algum erro em minha configuração? O que mais posso tentar encontrar o problema / corrigir o problema?

EDITAR:

Curiosamente, quando eu cometi um erro de sintaxe na minha configuração, o erro 500 que recebi foi compactado!

    
por Bojan Hrnkas 22.04.2015 / 12:47

2 respostas

0

O culpado era uma regra no mod de reescrita:

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

Isso fazia parte da configuração antiga da qual eu esqueci.

    
por 22.04.2015 / 14:49
3

Eu tenho o seguinte, que funciona e parece bem diferente do seu. E se você simplificar sua configuração para ser mais ou menos assim?

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

Além disso, não se esqueça de usar Vary: Accept-Encoding e não Vary: User-Agent se você puder evitar fazê-lo. Talvez você também queira ajustar os cabeçalhos de solicitação Accept-Encoding de entrada antes que eles atinjam seu cache (se você tiver um). Caso contrário, você obteria realmente taxas de acerto de cache do lixo porque estaria armazenando em cache mais de 40 representações diferentes para todas as diferentes técnicas de compactação e todas as diferentes sequências de agente do usuário.

Aqui está o que eu colocaria em um proxy reverso para implementar isso.

# 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"

O MASHED é em grande parte para o meu benefício como um lembrete de que o cabeçalho foi editado.

    
por 22.04.2015 / 13:02