Как настроить кэширование на сервере?

Как я уже писал ранее, свои сайты я перенес на виртуальный сервер, и все настраиваю его, настраиваю… Вот, подошло время настроить кэширование на сервере, чтобы он не зависал при большой нагрузке. А нагрузка на сервере есть, так как суммарная посещаемость моих сайтов уже несколько тысяч. А это чревато тем, что нагрузки могут привести к зависанию сервера.

А такое уже происходило, вот вчера как раз:

Как настроить кэширование на сервере

Помогла перезагрузка, ну а если бы меня не было на месте, он так и висел бы сутками? Как вы понимаете, иметь свой сервер более ответственно, чем просто хостинг, за ним нужно постоянно следить.

Но не нужно пугаться, если все правильно настроить, то все будет работать и без вашего участия. У меня зависало все от того, что я с прошлого хостинга принес кажется заразу, и мой сервер рассылал спам. Это было хорошо видно при запуске atop, процесс postfix просто заполонил процессы. Если atop не стоит, то его легко можно установить командой:

Так как эта почтовая служба мне не нужна, то решил проблему спама я просто:

Нет почтового сервера, нет проблем. Но это лишь частичное решение проблемы, потом нужно будет проверить все сайты антивирусом и удалить вредоносный код.

Это была прелюдия, теперь вернемся к основной теме — настройка кэширования сервера. Настроить кэширование нужно обязательно, так как нагрузки на сервер я планирую, к большому трафику нужно готовиться заранее.

Как сделать кэширование на сервере?

Ребята на хостинге посоветовали установить кэширующий прокси varnish. Ставится легко:

После этого сервер нужно настроить. Вроде ничего сложного, но дело ответственное, поэтому лучше все делать, когда посетителей меньше всего, например, ночью. Для начала откроем файл /etc/default/varnish. Есть там такие примерно строки, и их нужно довести до такого состояния:

Мы настроили работу прокси сервера на 80 порт. Сейчас на этом порту у нас работает веб сервер, но мы хотим, чтобы трафик сначала шел через прокси по этому 80 порту, а потом по порту 8080 отдавал трафик уже веб серверу.

Затем нужно открыть файл /etc/varnish/default.vcl и подправить его до состояния:

У меня все было уже настроено именно как нужно. Теперь нужно настроить apache2 на порт 8080, чтобы он работал через наш прокси сервер. Для этого открываем файл /etc/apache2/ports.conf и в значении Listen ставим порт 8080 вместо 80:

Далее открываем файл /etc/apache2/sites-available/000-default.conf и правим так же его в этом месте, чтобы было вот так:

Так же нужно во всех файлах настройки конкретных сайтов в этой же папке, типа zmoe.ru.conf, поменять порт 80 на 8080.

Все, теперь мы настроили веб сервер так, чтобы он работал через порт 8080. Если у вас файлы называются немного по другому, то действуйте просто по этому алгоритму, понимая суть.

После этого нужно перезапустить сервера apache2 и varnish:

Все заработало как надо, можно проверить работу прокси сервера набрав в терминале команду varnishstat :

настроить кэширование на сервере

Как видно, циферки бегают, а значит кэширование работает. Но можно проверить ещё одним способом. Есть такой сайт — , где можно проверить, работает ли у вас кэширующий сервер.

проверить кэширование

Проверяю свой сайт, посмотрим, что покажет:

настройка прокси сервера

YES! Все работает! Это, конечно, самая простая настройка, можно настроить этот кэширующий сервер более тонко, но как вы понимаете, мне пока и так нормально.

Будут вопросы — пишите, помогу чем могу :)

Оцените статью
Просто Линукс
Добавить комментарий

  1. prostolinux автор

    Хорошо все работало, жалко, что накрылся этот хостинг, в принципе был хорош. А ещё хорошо, что я успел вывести 10$ реферальных :)

  2. Мариша

    А как быть, если проверка показала, что не все в порядке?

  3. prostolinux автор

    Значит вы что-то неправильно сделали. После настройки сервера его нужно обязательно перезапустить, чтобы изменения вошли в силу.

  4. Георгий

    Здравствуйте! Немногим больше года назад перенёс свои сайты на сервер домашний как и Вы. Вчера созрел поставить varnish (у меня уже стоит apache за nginx), так как подтормаживать стали сайты. На Вашу статью набрёл, когда собирал информацию про varnish. В общем, после установке varnish (пробовал варианты: засунуть его между apache и nginx, поставить вперёд) сайты стали только больше тормозить. У меня почти все сайты почти на всех страницах используют Cookie — счётчики всякие, а varnish такие страницы не кэширует. Настраивать пытался — не помогло. Подождал денёк, да отключил varnish — сайты заработали быстрее! :) Я, конечно, ожидал, что varnish чудо сотворит и всё будет летать просто. Кстати, нагрузка на сервер и вправду снизилась где-то с 30-50% до 15-35%. В сети не нашёл ни одного упоминания, об ухудшении производительности с varnish.
    Андрей, а какая конфигурация веб-серверов у Вас была до установки varnish, что он так помог даже с настройками по-умолчанию?
    Поделюсь тем, что мне помогло (использовал уже давно):
    mod_pagespeed для apache от Google. На nginx тоже есть, но не осилил установку, вернее пересборку nginx. :)
    А сегодня вычитал, что в mod_pagespeed тоже есть кэширование с использованием оперативной памяти.
    Ещё сервис CloudFlare помогает снизить нагрузку на сервер. Использую бесплатную версию. Количество сайтов на учётную запись, похоже, не ограничено.

  5. prostolinux автор

    Я какое-то время назад отказался от этой связки ndnix и apahe — сервер падал очень часто. Оставил один apache и забыл о проблемах. Даже если apache нагрузить на 100%, то он потупит, но потом будет все нормально. NGNIX же после падения приходилось постоянно перезапускать.

    От varnish тоже отказался (хотя не помню даже, может еще пыхтит, а я и не помню?) и подключил CloudFlare — там кэширование отлично работает и пусть у них сервер в этом отношении пыхтит ;)

    Единственное, что не могу сделать — это включите кэширование браузера — пишет мне google speed! Что только не делал, и писал хостеру — ничего не помогает!

  6. Георгий

    А какая ОС у Вас стоит?
    На самом деле после получения своего небольшого опыта странно такие вещи слышать. У меня, например, nginx никогда не падал. Вернее, может и падал, но замечен за этим не был. Apache мог наплодить 400-500 процессов и всё повесить. Перезагрузка помогала.Причину всё ещё не выяснил.
    У меня varnish сейчас простаивает. Может ещё поэкспериментирую, а может просто снесу.
    А давно CloudFlare используете? Или после моего комментария? :)
    По поводу кэширования — мне кажется на это можно забить, ведь в первую очередь он ругается на сторонние ресурсы с других доменов, над которыми мы не властны.
    У Вас:
    _http://s.uuidksinc.net/…/12/a10f0000-23a0-d456-d74a-0000899b8e6d (не указан срок действия)
    _https://content.zemanta.com/static/img/loading.gif (не указан срок действия)
    _http://ssp.rambler.ru/autocontext2.js (60 секунд)
    _https://apis.google.com/js/api.js (30 минут)
    _https://apis.google.com/js/platform.js (30 минут)
    _http://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js (60 минут)
    _https://mc.yandex.ru/metrika/watch.js (60 минут)
    _https://oauth.googleusercontent.com/…e:rpc:shindig.random:shindig.sha1.js?c=2 (60 минут)
    _https://pagead2.googlesyndication.com/pagead/osd.js (60 минут)
    У меня то же самое (только чуть другой набор адресов):
    _https://apis.google.com/js/api.js (30 минут)
    _https://apis.google.com/js/plusone.js (30 минут)
    _http://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js (60 минут)
    _http://www.google.com/jsapi (60 минут)
    _http://www.google.com/…42260174dcc80e2ec53&have=transliteration (60 минут)
    _http://www.google.com/…le=elements&v=1&packages=transliteration (60 минут)
    _https://mc.yandex.ru/metrika/watch.js (60 минут)
    _https://oauth.googleusercontent.com/…e:rpc:shindig.random:shindig.sha1.js?c=2 (60 минут)
    _https://pagead2.googlesyndication.com/pagead/osd.js (60 минут)
    _http://www.google-analytics.com/ga.js (2 часа)
    Со своей же стороны у нас кэширование включено. Как вижу у Вас — стандартное время от CloudFlare — 4 часа.
    Кстати, только что вычитал в справке Google: «Продолжительность хранения статических ресурсов в кеше должна составлять не менее недели.»
    Да, это то, что Google хочет. Выставил в CloudFlare кэширование на 16 дней — и он доволен! :)
    Теперь исправить «использование кэша» стоит в жёлтом разделе «по возможности». И ругается только на сторонние домены.

  7. prostolinux автор

    Тут наверное зависит от многого: посещаемости, количества плагинов и самих сайтов, и так далее. У меня несколько сайтов, несколько тысяч в сутки, поэтому бывала и нагрузка. Но на самом деле даже не это было проблемой, а одна база данных, которая оказалась загажена одним плагином, писал о своей борьбе в этой статье — //zmoe.ru/sokratite-vremya-otveta-servera/

    CloudFlare давно использую, правда вырубал его в январе, поехал в отпуск на родину в Мурманскую область, и с удивлением обнаружил, что пару провайдеров блокируют мои сайты. Оказалось, что из-за CloudFlare я оказался на одном IP с сайтом из реестра запрещенных сайтов. Но потом опять врубил, все же полезная вещь.

    Про кэширование так оно и есть, но все же обидно, хотелось все сделать все на 100%. В прочем мне это удавалось как то плагином autooptimize, но там свои побочные эффекты — //zmoe.ru/kak-udalit-javascript/

    Выставил в CloudFlare кэширование на 16 дней — это где настраивается? Впрочем сам поищу. А сторонние ресурсы (js файлы) нужно закачать себе на хостинг и прописать к ним путь, я так не раз делал и с adsense и с РСЯ, да и с другими скриптами.

  8. Георгий

    Или не закачивать к себе, а через RewriteRule выдавать всегда актуальные копии с оригинальных серверов, но под своим адресом. Я в этом не силён, но вроде такое возможно.
    Ну или через echo file_get_contents передавать, правда, это мне кажется не лучшим решением — всё через наш сервер будет прогоняться.
    А в CloudFlare: Caching, а там третья табличка сверху:
    Browser Cache Expiration.

  9. prostolinux автор

    Спасибо, про время в CloudFlare: Caching не знал, теперь настрою. А вы в курсе, что вам CloudFlare дубль сайта по _https://ru.full-repair.com/ делает? Только недавно с этим боролся //zmoe.ru/kak-zakryt-https-ot-indeksacii/ посмотрите, может я и ошибаюсь, но у вас кажется такая же проблема.

  10. Георгий

    Вы не ошиблись, спасибо! Повыключал https на сайтах. Пока тоже не вижу в нём необходимости.

  11. prostolinux автор

    CloudFlare дает возможность бесплатно подключить https, но я читал, что преимуществ это не дает особых в трафике, а вот проблемы могут легко возникнуть, так как Яндекс как то криво, говорят, индексирует https. Поживем, посмотрим…

  12. Александр

    «Так же нужно во всех файлах настройки конкретных сайтов в этой же папке, типа zmoe.ru.conf, поменять порт 80 на 8080.» я не пойму где это поменять?