Оптимизированные конфигурации

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

<IfModule mod_gzip.c>
# включаем gzip mod_gzip_on Yes
# если рядом с запрашиваемым файлом есть сжатая версия с расширением .gz, то # будет отдана именно она, ресурсы CPU расходоваться не будут
mod_gzip_can_negotiate Yes

# используем при статическом архивировании расширение .gz
mod_gzip_static_suffix .gz

# выставляем заголовок Content-Encoding: gzip
AddEncoding gzip .gz

# выставляем минимальный размер для сжимаемого файла mod_gzip_minimum_file_size 1000

# и максимальный размер файла
mod_gzip_maximum_file_size 500000

# выставляем максимальный размер файла, сжимаемого прямо в памяти
mod_gzip_maximum_inmem_size 60000

# устанавливаем версию протокола, с которой будут отдаваться gzip-файлы
# на клиент
mod_gzip_min_http 1000

# исключаем известные проблемные случаи
mod_gzip_item_exclude reqheader “User-agent: Mozilla/4.0[678]”
mod_gzip_item_exclude reqheader “User-agent: Konqueror”

# устанавливаем сжатие по умолчанию для файлов .html
mod_gzip_item_include file \.html$

# включаем .css / .js файлы, подробнее о них ниже
mod_gzip_item_include file \.js$
mod_gzip_item_include file \.css$

# дополнительно сжимаем другие текстовые файлы
mod_gzip_item_include mime ^text/html$
mod_gzip_item_include mime ^text/plain$
mod_gzip_item_include mime ^httpd/unix-directory$

# отключаем сжатие для картинок (не дает никакого эффекта)
mod_gzip_item_exclude mime ^image/

# отключаем ‘Transfer-encoding: chunked’ для gzip-файлов, чтобы
# страница уходила на клиент одним куском
mod_gzip_dechunk Yes

# добавляем заголовок Vary для корректного распознавания браузеров,
# находящихся за локальными прокси-серверами
mod_gzip_send_vary On
</IfModule>
<IfModule mod_headers.c>

# запрещаем прокси-серверам кэшировать у себя сжатые версии файлов
<FilesMatch .*\.(js|css|html|txt)$>
Header set Cache-Control: private
</FilesMatch>
</IfModule>
<IfModule mod_expires.c>

# включаем кэширование для всех файлов сроком на 10 лет
ExpiresActive On
ExpiresDefault “access plus 10 years”

# отключаем его для HTML-файлов

<FilesMatch .*\.(shtml|html|phtml|php)$>
ExpiresActive Off
</FilesMatch>
</IfModule>

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

# выставляем заголовок Content-Encoding: gzip
AddEncoding gzip .gz
# с самого начала включаем gzip для текстовых файлов
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
# и для favicon.ico
AddOutputFilterByType DEFLATE image/x-icon
# также для CSS- и JavaScript-файлов
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/x-javascript

# далее устанавливаем максимальную степень сжатия (9)
# и максимальный размер окна (15). Если сервер не такой мощный,
# то уровень сжатия можно выставить в 1, размер файлов при этом
# увеличивается примерно на 20%.
DeflateCompressionLevel 9 DeflateWindowSize 15

# отключаем сжатие для тех браузеров, у которых проблемы с
# его распознаванием:
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch Konqueror no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# указываем прокси-серверам передавать заголовок User-Agent для
# корректного распознавания сжатия
Header append Vary User-Agent

# запрещаем кэширование на уровне прокси-сервера для всех файлов,
# для которых у нас выставлено сжатие,
<FilesMatch .*\.(css|js|php|phtml|shtml|html|xml)$>
Header append Cache-Control: private
</FilesMatch>

# включаем кэширование для всех файлов сроком на 10 лет
ExpiresActive On
ExpiresDefault “access plus 10 years”

# отключаем его для HTML-файлов
<FilesMatch .*\.(shtml|html|phtml|php)$>
ExpiresActive Off
</FilesMatch>

Конфигурация nginx 0.7+

Пример конфигурационного файла для одного виртуального сервера:

server {
#слушаем порт 80
listen 80;

#перечисляем через пробел имена этого сервера
server_name core.freewheel.ru:

#путь к корню сервера
root /my/path/to/core.freewheel.ru;

#пути к логам
access_log /my/path/to/core-access.log combined;
error_log /my/path/to/core-access.log info;

#подключаем шаблон настроек сервера, в нем самое интересное
include _servers_template;

#разрешаем себе посмотреть статус сервера
location = /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}

#включаем сжатие для тех браузеров, которые его понимают
gzip on;

#определяем минимальную версию протокола HTTP, для которой отдаем архивы
gzip_http_version 1.0;

#устанавливаем максимальный уровень сжатия
gzip_comp_level 9;

#разрешаем проксировать сжатые файлы
gzip_proxied any;

#и определяем типы файлов (все, которые хорошо сжимаются)
gzip_types text/plain text/css application/x-javascript text/xml application/xml
application/xml+rss text/javascript image/x-icon;
}

А теперь собственно основной файл настроек (_servers_template), использующийся для всех виртуальных серверов в неизменном виде:

index index.php index.html;

location / {

# стили, скрипты и XML-файлы
location ~* ^.+\.(css|js|xml)$ {

# вот для этого и делались заранее архивированные .gz версии
# css и js файлов. Nginx не будет тратить время и сжимать их каждый раз
# заново, а просто отдаст уже готовые архивы, если браузер клиента может
# их принять
gzip_static on; expires 1y;
}

# несуществующие файлы html и папки отправляем на бэкенд
if (!-e $request_filename ) {
rewrite ^/(.*)$ /index.php ;
}

# проксируем все запросы к PHP-файлам на FCGI бэкенд

location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include _fastcgi_params;
}

# картинки
location ~* ^.+\.(bmp|gif|jpg|jpeg|ico|png|swf|tiff)$ {
expires 1y;
}

# файлы
location ~* ^.+\.(bz2|dmg|gz|gzip|rar|tar|zip)$ {
expires 1y;
}

# другие статические файлы
location ~* ^.+\.(pdf|txt)$ {
expires 1y;
}
}

Обычно nginx собирается без модуля статического сжатия, поэтому при его сборке надо указать опцию –with-http_gzip_static_module – без этого gzip_static не заработает, и серверу придется сжимать файлы каждый раз заново. Также надо иметь в виду, что указанная конфигурация приведена для версии 0.7+.

Настройка IIS

В IIS включить сжатие достаточно просто: необходимо в диспетчере служб IIS зайти в свойства элемента «Веб узлы» и перейти во вкладку «Служба». Плюсы такого включения сжатия:

  • простота;
  • поддержка сжатия IIS статических файлов;
  • поддержка кэширования сжатых файлов;
  • не требует написания кода.

Минусы включения поддержки сжатия на сервере IIS:

  • сервер решает: вы не будете знать, что, когда и как сжимается;
  • глобальное включение: сжатие включается для всей службы разом и будет влиять на все узлы или виртуальные каталоги вашего сервера (по крайне мере, через gui отключить сжатие у конкретного узла нельзя);
  • возможны различные проблемы на уровне конфликтов локальных серверных скриптов или проблемы совместимости с некоторыми браузерами. Был зафиксирован случай, когда один из пользователей пожаловался на то, что у него стала отображаться пустая главная страница как раз после включения сжатия через IIS; после выключения все вернулось в норму.

Материалы близкой тематики:

Posted in Разгони свой сайт.