Apache2 + nginx = кеширование
В предыдущей статье я описывал как настроить Squid фронтэндом для ускорения отдачи страничек сайта. В тот же день я все таки добился кеширования страниц сервером nginx и перевел свой сервер на связку Apache2 + nginx + кеширование средствами nginx.
Получилось весьма не плохо, что подтверждают тесты сервисом Load Impact и программой siege.
Итак, приступим.
Для начала ставим последнюю версию nginx. Т.к. в репозитариях ее нет, то соберем ее из исходников:
$ wget http://sysoev.ru/nginx/nginx-0.8.29.tar.gz
Распаковываем куда нибудь содержимое архива и конфигурируем сборку:
$ ./configure --conf-path=/etc/nginx
Т.е. конфигурационные файлы будут у нас лежать в /etc/nginx
Дальше классические:
$ make
$ sudo make install
Теперь правим конфигурационные файлы.
/etc/nginx/nginx.conf
В раздел http я добавил кеширование:
proxy_cache_path /var/nginx/cache levels=1:2 keys_zone=one:10m inactive=7d max_size=200m;
proxy_temp_path /var/nginx/temp;
Все параметры в официальной документации очень подробно расписаны, поэтому останавливаться на этом не буду.
Дальше настраиваем виртуальные хосты (/etc/nginx/sites-enabled). Поскольку у меня их довольно не мало, хоть и не так уж и много, то руками все прописывать я не стал, а подготовил скрипт, который вычитал имена хостов из Апача и сгенерил по шаблону конфиги хостов для nginx.
Шаблон был стандартный, т.е. такой:
server {
listen 80;
server_name silverghost.org.ua www.silverghost.org.ua;
proxy_temp_path /var/nginx/temp/silverghost.org.ua;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Host $http_host;
proxy_set_header X-URI $uri;
proxy_set_header X-ARGS $args;
proxy_set_header Refer $http_refer;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 10m;
proxy_cache one;
proxy_cache_key $host$scheme$proxy_host$uri$is_args$args;
proxy_cache_valid 200 302 304 10m;
proxy_cache_valid 301 1h;
proxy_cache_valid any 1m;
}
}
После чего я в настройках Апача изменил его порт на 8080 и перезапустил его. Момент истины настал – запускаем nginx:
$ sudo /usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf
Собственно базовая настройка для всех хостов завершена. Странички будут теперь отдаваться гораздо быстрее и какой-то базовый Хабраэффект сервер выдержит.
Но погуляв по сайтам я вдруг обнаружил, что сайты на WordPress и Joomla иногда глючат. В частности на моем сайте не оставлялись комментарии, а на Joomla-сайтах невозможно было залогиниться ни в админку, ни на сайт. Поковырявшись во внутренностях, я нашел как это дело исправить. Все просто, для определенных ключевых моментов нужно отключить кеширование и все начинает работать как часы.
В частности для WordPress в раздел server добавляем еще один location:
location ~*(comments|wp-admin)* {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Host $http_host;
proxy_set_header X-URI $uri;
proxy_set_header X-ARGS $args;
proxy_set_header Refer $http_refer;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 10m;
}
Для Joomla добавляем такой location:
location ~*(administrator|comprofiler)* {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Host $http_host;
proxy_set_header X-URI $uri;
proxy_set_header X-ARGS $args;
proxy_set_header Refer $http_refer;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 10m;
}
Надеюсь эта статья облегчит жизнь Вашему серверу. :)
Постовые: трудоустройство моряков в одессе, ускоренная регистрация торговой марки, оборудование лабораторий





Познавательно, жаль только что нет примеров исключения для DataLife Engine
что ж, прийдется найти их опытным путем
Их нет, т.к. я не пользую DLE. Если бы пользовал – выложил бы. Но думаю ты и сам разберешься. там все просто. ;)
Ну вообще-то сделать для DLE это не сложно. Документация по nginx вся на русском языке, хотя тут многое интуитивно понятно, если знаешь хотя бы технический английский
Для ДЛЕ нужно просто не кешировать комментарии и админку (edit_news и т.д.). Настраивается простыми location
Так же при желании можно привязать кэширование к сессиям, что избавит от некоторых проблем на многих движках, т.к. не будут теряться сессионные данные при кешировании. Делается добавлением переменной сессии (берем из заголовка) в директиву proxy_cache_key
А вообще для многих сайтов, для того же ДЛЕ apache как таковой не нужен. Все можно сделать на “голом” nginx. Недавно я как раз написал такую статью, думаю админ блога не удалит пруфлинк :) Вещь полезная
Конечно не удалю. Полезные ссылки – всегда хорошо. :)
Параметры
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
не могут быть больше 75. Читайте официальную документацию.
connect_timeout соглашусь. мое упущение.
про остальные в официальной документации ничего не сказано.
а вопрос попутно – не в курсе почему в секции http { …. } – т.е. как я понимаю в глобальных настройках сервера не отрабатывает директива client_max_body_size 64M; – а отрабатывает только в секции server { … } ? Т.е. по дефолту так и остается в 1м если в глобальной секции прописано. Может быть были какие-то изменения в конфигурации nginx? Версия nginx-0.7.64
увы. не подскажу… я еще не настолько силен в этом вопросе… только начинаю разбираться…
у меня вот некоторые сайты (там где аяксовые примочки) не очень корректно работают… пытаюсь понять почему. тот же двиг livestreet не показывает голосования.
Аяксовые примочки могут быть написаны с учетом apache-style, например, если используют специфические для apache переменные, которых нет в nginx. Ну и с SOAP и с chunk у nginx есть некоторые проблемы. Как бы полностью апач ему пока не заменить
apache2.2 + nginx кеширование…
На днях поставил nginx как front-end сервер, быстродействие повысилось, но ведь хочется еще больше.. Включил кеширование на nginx`е как описано здесь! Но проверить кеш в действии не получается! nginx не хочет обновлять конфиг! Остановить nginx тоже не …
Как его удалить после установки?))