Как я могу получить сжатие Apache gzip для работы?
Я не могу заставить свой сайт использовать сжатие gzip.
Недавно я посмотрел это видео Криса Койера на css-tricks.com. В видео он рассказывает о том, как включить сжатие gzip, чтобы веб-сайты работали быстрее.
Согласно его инструкции, я связался с github через html5boilerplate.com, скопировал код сжатия gzip из их файла.htaccess, вставил его в свой собственный и загрузил на свой сайт.
Я проверил это через gzipwtf.com, и это не похоже на работу. Кто-нибудь может мне с этим помочь?
Мой файл.htaccess выглядит так:
# ----------------------------------------------------------------------
# Trim www
# ----------------------------------------------------------------------
RewriteEngine On
RewriteCond %{HTTP_HOST} !^orbitprint.com$ [NC]
RewriteRule ^(.*)$ http://orbitprint.com/$1 [L,R=301]
# ----------------------------------------------------------------------
# Gzip compression
# ----------------------------------------------------------------------
<IfModule mod_deflate.c>
# Force deflate for mangled headers developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping/
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding
</IfModule>
</IfModule>
# Compress all output labeled with one of the following MIME-types
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE application/atom+xml \
application/javascript \
application/json \
application/rss+xml \
application/vnd.ms-fontobject \
application/x-font-ttf \
application/xhtml+xml \
application/xml \
font/opentype \
image/svg+xml \
image/x-icon \
text/css \
text/html \
text/plain \
text/x-component \
text/xml
</IfModule>
</IfModule>
10 ответов
Попробуй это:
####################
# GZIP COMPRESSION #
####################
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-javascript application/x-httpd-php
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip
Я пытался, и это лучше, чем другие, я думаю... Просто вставьте свой файл.htaccess, чем проверьте время загрузки в Google PageSpeed, Pingdom Tools и GTmetrics.
# Enable GZIP
<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</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>
Ваш.htaccess должен работать просто отлично; это зависит от четырех разных модулей Apache (по одному на каждый <IfModule>
Директива). Я предполагаю одно из следующего:
на вашем сервере Apache не установлены и не работают модули mod_filter, mod_deflate, mod_headers и / или mod_setenvif. Если вы можете получить доступ к конфигурации сервера, пожалуйста, проверьте
/etc/apache2/httpd.conf
(и связанные файлы конфигурации Apache); в противном случае вы можете увидеть, какие модули загружаются черезphpinfo()
под разделом apache2handler (см. прикрепленное изображение); (РЕДАКТИРОВАТЬ) ИЛИ, вы можете открыть окно терминала и выполнить командуsudo apachectl -M
это будет список загруженных модулей;если вы получили внутреннюю ошибку сервера http 500, вашему серверу может быть запрещено использовать файлы.htaccess;
Вы пытаетесь загрузить файл PHP, который отправляет свои собственные заголовки (перезаписывая заголовки Apache), таким образом "сбивая с толку" браузер.
В любом случае вам следует дважды проверить конфигурацию сервера и журналы ошибок, чтобы увидеть, что происходит не так. Просто чтобы быть уверенным, попробуйте использовать самый быстрый способ, предложенный здесь, в документации Apache:
AddOutputFilterByType DEFLATE text/html text/plain text/xml
а затем попробуйте загрузить большой текстовый файл (желательно сначала очистить кэш).
(РЕДАКТИРОВАТЬ) Если необходимые модули есть (в директории модулей Apache), но не загружены, просто отредактируйте /etc/apache2/httpd.conf и добавьте директиву LoadModule для каждого из них.
Если необходимые модули отсутствуют (ни загружены, ни в каталоге модулей Apache), я боюсь, что единственный вариант - переустановить Apache (полная версия).
Прежде всего, зайдите в apache/bin/conf/httpd.conf и убедитесь, что mod_deflate.so включен.
Затем перейдите в файл .htaccess и добавьте следующую строку:
SetOutputFilter DEFLATE
Это должно выводить весь контент, который подается как GZIP, я попробовал, и он работает.
Если ваш веб-хост через C Panel, включите G ZIP сжатие на Apache C Panel
Перейдите на CPanel и проверьте вкладку программного обеспечения.
Ранее оптимизировать веб-сайт раньше работал, но теперь доступна новая опция, например, "MultiPHP INI Editor".
Выберите доменное имя, которое вы хотите сжать.
Прокрутите вниз, пока не найдете сжатие zip-вывода и включите его.
Теперь проверьте еще раз для сжатия G ZIP.
Вы также можете следить за видео уроком. https://www.youtube.com/watch?v=o0UDmcpGlZI
В моем случае я использовал следующий код для включения сжатия gzip на веб-сервере apache.
# Compress HTML File, CSS File, JavaScript File, Text File, XML File and Fonts
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/json
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
Я воспользовался ссылкой с http://www.tutsway.com/enable-gzip-compression-using-htacess.php.
Столкнулся с этой проблемой, используя ту же конфигурацию.htaccess. Я понял, что мой сервер обслуживает файлы javascript как text/javascript
вместо application/javascript
, Как только я добавил text/javascript
к AddOutputFilterByType
декларация, gzip начал работать.
Относительно того, почему javascript служил в качестве text/javascript
: это был AddType 'text/javascript' js
объявление в верхней части моего корневого файла.htaccess. После его удаления (он был добавлен по ошибке), JavaScript стал служить application/javascript
,
Включить сжатие через.htaccess
Для большинства людей, читающих это, сжатие включается добавлением некоторого кода в файл с именем.htaccess на их веб-хосте / сервере. Это означает, что вы обращаетесь к файловому менеджеру (или куда бы вы ни добавляли или загружали файлы) на вашем веб-хосте.
Файл.htaccess контролирует много важных вещей для вашего сайта.
Код ниже должен быть добавлен в ваш файл.htaccess...
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>
Сохраните файл.htaccess, а затем обновите веб-страницу.
Проверьте, работает ли сжатие с помощью инструмента сжатия Gzip.
В моем случае добавляется только эта строка
SetOutputFilter DEFLATE
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>
<IfModule mod_deflate.c>
# Insert filters
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE image/svg+xml
# Drop problematic browsers
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
</IfModule>