Опубликован: 16.02.2009 | Доступ: свободный | Студентов: 1440 / 141 | Оценка: 4.26 / 4.17 | Длительность: 16:10:00
ISBN: 978-5-9963-0024-2
Специальности: Разработчик интернет-проектов
Лекция 8:
Приложение
Оптимизированные конфигурации
Конфигурация 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+.