Ускорение Apache: mod_pagespeed с Memcached на Ubuntu 16.04
Введение
Время загрузки страницы влияет на поведение пользователей и ранжирование в поисковых системах. mod_pagespeed — модуль Apache от Google — автоматически оптимизирует ресурсы сайта (сжатие, объединение, оптимизация изображений и пр.) и кеширует результат. По умолчанию модуль использует файловый кеш, но его можно заменить на Memcached — быстрый in-memory кеш-демон — для ещё более низкой латентности.
Опытный администратор увидит прирост производительности особенно на сайтах с большим числом мелких статических и динамически оптимизируемых ресурсов.
Важно: перед изменениями сделайте полную резервную копию конфигурации Apache и файлов сайта.
Требования
- Сервер с Ubuntu 16.04 (Xenial Xerus).
- Доступ root или sudo.
- Установленный Apache 2 (LAMP/Nginx не покрывается в этом гайде).
- Базовые навыки работы в терминале.
Краткая дефиниция: Memcached — это распределённый открытый кеш в оперативной памяти для ускорения динамических веб-приложений путём уменьшения обращения к базам данных.
Как определить архитектуру системы
Чтобы выбрать корректный пакет mod_pagespeed (32‑ или 64‑бит), выполните:
uname -aЕсли в выводе есть “x86_64”, система использует 64‑битное ядро — устанавливайте 64‑битный пакет.
Установка mod_pagespeed
Google предоставляет .deb пакеты для Ubuntu. Для 64‑битных систем выполните:
cd /tmp
wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_amd64.deb
dpkg -i mod-pagespeed-stable_current_amd64.debДля 32‑битных систем выполните:
cd /tmp
wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_current_i386.deb
dpkg -i mod-pagespeed-stable_current_i386.debПосле установки перезапустите Apache:
service apache2 restartУстановка Memcached
Memcached доступен в репозиториях Ubuntu и устанавливается так:
apt-get -y install memcachedПроверить, что Memcached запущен и прослушивает порт:
netstat -tap | grep memcachedПо умолчанию Memcached слушает localhost:11211 — этот порт понадобится для настройки mod_pagespeed.
Если вы планируете использовать Memcached и из PHP-приложений, установите расширение:
apt-get -y install php-memcachedНастройка mod_pagespeed для использования Memcached
Откройте конфигурационный файл pagespeed:
nano /etc/apache2/mods-available/pagespeed.confНайдите строку, содержащую «ModPagespeedMemcachedServers» и раскомментируйте её, чтобы она выглядела так:
[....]
ModPagespeedMemcachedServers localhost:11211
[....]Если на сервере достаточно свободной оперативной памяти, можно также включить общий кеш метаданных в разделяемой памяти, раскомментировав строку:
[....]
ModPagespeedCreateSharedMemoryMetadataCache "/var/cache/mod_pagespeed/" 51200
[....]После правок перезапустите Apache:
service apache2 restartТеперь mod_pagespeed будет использовать Memcached как бекенд для кеширования оптимизированного контента.
Проверка и отладка
Получить статистику Memcached можно через nc (netcat):
echo stats | nc 127.0.0.1 11211Пример вывода (пример сервера из тестов):
root@server1:/tmp# echo stats | nc 127.0.0.1 11211
STAT pid 2043
STAT uptime 177
STAT time 1461673050
STAT version 1.4.25 Ubuntu
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 0.008000
STAT rusage_system 0.036000
STAT curr_connections 11
STAT total_connections 12
STAT connection_structures 12
STAT reserved_fds 20
STAT cmd_get 224
STAT cmd_set 148
STAT cmd_flush 0
STAT cmd_touch 0
STAT get_hits 40
STAT get_misses 184
STAT delete_misses 0
STAT delete_hits 0
STAT incr_misses 0
STAT incr_hits 0
STAT decr_misses 0
STAT decr_hits 0
STAT cas_misses 0
STAT cas_hits 0
STAT cas_badval 0
STAT touch_hits 0
STAT touch_misses 0
STAT auth_cmds 0
STAT auth_errors 0
STAT bytes_read 357876
STAT bytes_written 180755
STAT limit_maxbytes 67108864
STAT accepting_conns 1
STAT listen_disabled_num 0
STAT time_in_listen_disabled_us 0
STAT threads 4
STAT conn_yields 0
STAT hash_power_level 16
STAT hash_bytes 524288
STAT hash_is_expanding 0
STAT malloc_fails 0
STAT bytes 327546
STAT curr_items 127
STAT total_items 148
STAT expired_unfetched 0
STAT evicted_unfetched 0
STAT evictions 0
STAT reclaimed 0
STAT crawler_reclaimed 0
STAT crawler_items_checked 0
STAT lrutail_reflocked 0
END
root@server1:/tmp#Важно: на новом сайте кеш сначала пуст — выполните несколько загрузок страниц, чтобы заполнить Memcached и увидеть реальный эффект.
Критерии приёмки
- Страница загружается заметно быстрее по инструментам PageSpeed Insights или DevTools (падение времени загрузки или времени до интерактивности).
- Нагрузка на CPU и I/O диска снизилась при профилировании сервера.
- Memcached показывает увеличение get_hits и уменьшение get_misses после прогрева кеша.
- Нет ошибок в логах Apache, связанных с mod_pagespeed.
Частые проблемы и их устранение
Проблема: mod_pagespeed не кеширует ресурсы. Решение: проверьте права на /var/cache/mod_pagespeed, убедитесь, что Memcached слушает 127.0.0.1:11211 и что строка ModPagespeedMemcachedServers не закомментирована.
Проблема: Memcached не стартует. Решение: смотрите системный журнал (journalctl или /var/log/syslog), проверьте опции запуска в /etc/default/memcached.
Проблема: сайту стало хуже после включения. Решение: временно отключите mod_pagespeed (a2dismod pagespeed && service apache2 restart) и проанализируйте разницу.
Когда это не помогает
- Очень динамичный сайт с постоянно изменяющимися ресурсами может получить мало выгоды от in-memory кеша.
- Если узкое место — не диск или CPU, а внешний API, ускорение модулем не даст ожидаемого результата.
Альтернативы и дополнения
- Varnish как HTTP reverse-proxy для кэширования целых страниц.
- Redis как альтернатива Memcached, если нужны дополнительные структуры данных и персистентность.
- CDN (Cloudflare, Fastly, S3+CloudFront) для геораспределённого кеширования статики.
Безопасность и эксплуатация
- Оставляйте Memcached слушающим только localhost (127.0.0.1) или защищайте его сетевым доступом и firewall — открытый Memcached в публичной сети — риск для безопасности.
- Мониторьте использование памяти и метрики get_hits/get_misses, чтобы правильно настроить объём памяти для Memcached.
- Убедитесь, что логирование Apache настроено и изменения можно откатить.
Чек-листы по ролям
Системный администратор:
- Сделать бэкап конфигураций Apache и файлов сайта.
- Установить mod_pagespeed и Memcached.
- Проверить права на кеш и перезапустить сервисы.
- Настроить firewall, чтобы закрыть порт 11211 извне.
Разработчик:
- Тестировать приложения на корректность после оптимизаций (клики, AJAX, авторизация).
- Проверить, что ресурсы корректно минифицируются и не ломают JS/CSS.
QA:
- Прогреть кеш и сравнить метрики до/после (время загрузки, TTFB, ошибки).
- Проверить страницы с авторизацией и динамическим контентом на корректность отображения.
Команды‑шпаргалка
# Проверить архитектуру
uname -a
# Установить memcached
apt-get -y install memcached
# Установить php-memcached для PHP
apt-get -y install php-memcached
# Посмотреть, слушает ли memcached
netstat -tap | grep memcached
# Получить статистику memcached
echo stats | nc 127.0.0.1 11211
# Перезапустить apache
service apache2 restartМодель принятия решения
flowchart TD
A[Нужна оптимизация загрузки страниц?] --> B{Тип сайта}
B -->|Статический или кешируемый| C[Использовать CDN + mod_pagespeed + Memcached]
B -->|Полностью динамический| D[Рассмотреть Varnish/Redis или оптимизацию приложения]
C --> E[Сделать нагрузочное тестирование]
D --> EСсылки
- PageSpeed Insights: https://developers.google.com/speed/pagespeed/insights/
- Memcached: https://memcached.org
Краткая сводка
Внедрение mod_pagespeed совместно с Memcached даёт ощутимое улучшение скорости отдачи оптимизированных ресурсов, снижает I/O и повышает ёмкость отдачи страниц в секунду. Начните с тестовой среды, прогрейте кеш и сравните метрики до и после, затем применяйте изменения в продакшне.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента