В этой заметке я опишу, как настроить mod_compress для веб-сервера lighttpd (на Debian Squeeze). mod_compress дает lighttpd возможность сжимать файлы и передавать их клиентам (например, браузерам), которые могут обрабатывать сжатый контент, что умеет делать большинство современных браузеров. С помощью mod_compress вы сможете сжать HTML, CSS, JavaScript, тестовые или XML файлы в среднем на 20-30% от их оригинальных размеров, что позволит сэкономить трафик на вашем сервере.
Включение и настройка mod_compress
Откройте в текстовом редакторе файл /etc/lighttpd/lighttpd.conf и проверьте, активен ли mod_compress в блоке server.modules (должен быть активен по умолчанию в Debian Squeeze):
server.modules = (
"mod_expire",
"mod_access",
"mod_alias",
"mod_compress",
"mod_redirect",
# "mod_rewrite",
)
[...]
Также найдите ниже в файле следующие строки:
[...]
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ("application/x-javascript", "text/css", "text/html", "text/plain")
[...]
Директива compress.cache-dir указывает lighttpd хранить сжатые файлы в директории /var/cache/lighttpd/compress/; директива compress.filetype указывает, какие типы файлов следует сжимать (обычно это Javascript, CSS, HTML и обычные текстовые файлы). Так как файлы javascript могут иметь разные типы файлов на каждом сервере, мы должны расширить эту директиву следующим образом:
[...]
compress.filetype = ("application/x-javascript", "application/javascript", "text/javascript", "text/x-js", "text/css", "text/html", "text/plain")
[...]
Затем убедитесь, что директория /var/cache/lighttpd/compress/ существует и права на неё принадлежат пользователю и группе www-data.
ls -la /var/cache/lighttpd/compress/
root@server1:~# ls -la /var/cache/lighttpd/compress/
total 8
drwxr-xr-x 2 www-data www-data 4096 Nov 12 12:45 .
drwxr-xr-x 4 www-data www-data 4096 Feb 17 17:57 ..
root@server1:~#
Если директории не существует, создайте её:
mkdir -p /var/cache/lighttpd/compress/
chown www-data:www-data /var/cache/lighttpd/compress/
Теперь перезапустите lighttpd:
/etc/init.d/lighttpd restart
Сжатие PHP
В PHP имеется собственная поддержка сжатия, однако она может не обрабатываться lighttpd. Чтобы включить сжатие PHP, откройте /etc/php5/cgi/php.ini и установите параметр zlib.output_compression на On
[...]
; Transparent output compression using the zlib library
; Valid values for this option are 'off', 'on', or a specific buffer size
; to be used for compression (default is 4KB)
; Note: Resulting chunk size may vary due to nature of compression. PHP
; outputs chunks that are few hundreds bytes each as a result of
; compression. If you prefer a larger chunk size for better
; performance, enable output_buffering in addition.
; Note: You need to use zlib.output_handler instead of the standard
; output_handler, or otherwise the output will be corrupted.
; http://php.net/zlib.output-compression
zlib.output_compression = On
[...]
Перезапустите lighttpd:
/etc/init.d/lighttpd restart
Очистка директории сжатия lighttpd
Директория, в которой lighttpd хранит сжатые файлы (по умолчанию /var/cache/lighttpd/compress/), должна регулярно очищаться от старых, неиспользуемых файлов. В Debian Squeeze в /etc/cron.daily/lighttpd можно найти задание cron, которое выполняет это ежедневно:
#!/bin/sh
# Cleanup lighttpd compress cache
cache=/var/cache/lighttpd
if test -d "$cache/compress"; then
su -s /bin/sh -c "find $cache/compress -type f -atime +30 -print0 | xargs -0 -r rm" www-data
fi
if test -d "$cache/uploads"; then
su -s /bin/sh -c "find $cache/uploads -type f -atime +1 -print0 | xargs -0 -r rm" www-data
fi
Это задание производит очистку директории от файлов, к которым не было обращений в последние 30 дней.
Если /etc/cron.daily/lighttpd не существует, вы можете создать задание самостоятельно:
crontab -e
23 4 * * * /usr/bin/find /var/cache/lighttpd/compress -type
(Это задание будет выполняться каждый день в 4:23)
Тестирование
Для того, чтобы проверить работоспособность настроек, вы можете скачать плагин для Firefox под названием Live HTTP Headers и открыть текстовый файл в браузере (например, статичную HTML-страницу). В выводе Live HTTP Headers, вы должны увидеть, что клиент (Firefox) отправляет серверу заголовок Accept-Encoding: gzip,deflate для того, чтобы сообщить о поддержке сжатого контента в форматах gzip и deflate; сервер должен сжать файл и отправить его с заголовком Content-Encoding: gzip.
Если вы проверите директорию /var/cache/lighttpd/compress/, вы увидите, что она теперь не пуста. Теперь она должна хранить сжатые версии запрошенных файлов:
ls -la /var/cache/lighttpd/compress/
root@server1:~# ls -la /var/cache/lighttpd/compress/
total 16
drwxr-xr-x 2 www-data www-data 4096 Mar 7 16:32 .
drwxr-xr-x 4 www-data www-data 4096 Feb 17 17:57 ..
-rw———- 1 www-data www-data 3102 Mar 7 16:32 howto.html-gzip-237485-9070-1299510809
-rw———- 1 www-data www-data 1562 Mar 7 16:30 index.lighttpd.html-gzip-237105-3585-1297961821
root@server1:~#
|