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.
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!
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.
Tags apache-2.2 mod-deflate