В предыдущей статье я описывал как настроить Squid фронтэндом для ускорения отдачи страничек сайта. В тот же день я все таки добился кеширования страниц сервером nginx и перевел свой сервер на связку Apache2 + nginx + кеширование средствами nginx.
Получилось весьма не плохо, что подтверждают тесты сервисом и программой 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;
}
Надеюсь эта статья облегчит жизнь Вашему серверу. :)
Постовые: , ,

Рубрики
Теги: 
а вопрос попутно – не в курсе почему в секции 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 тоже не …
Nginx останавливать не нужно. Думон управляется с помощью сигналов.
Например, чтобы «мягко потушить» демон , нужно послать ему сигнал:
>kill -s sigquit $nginx_pid
И тогда все валидненько завершится. Есть сигналы, которые заставляют nginx перечитывать конфиг. Щас не помню точно, но в конфигах все черным по белому.
Если ты этого не знал, то как тогда глушил сервер (если конечно глушил)?
Пардон, не в конфигах описано, а в документации
От туда же:
Управлять nginx можно с помощью сигналов. Номер главного процесса по умолчанию записывается в файл /usr/local/nginx/logs/nginx.pid. Изменить имя этого файла можно при конфигурации сборки или же в nginx.conf директивой pid. Главный процесс поддерживает следующие сигналы:
TERM, INT быстрое завершение
QUIT плавное завершение
HUP изменение конфигурации, обновление изменившейся временной зоны (только для FreeBSD и Linux), запуск новых рабочих процессов с новой конфигурацией, плавное завершение старых рабочих процессов
USR1 переоткрытие лог-файлов
USR2 обновление исполняемого файла
WINCH плавное завершение рабочих процессов
Управлять рабочими процессами по отдельности не нужно. Тем не менее, они тоже поддерживают некоторые сигналы:
TERM, INT быстрое завершение
QUIT плавное завершение
USR1 переоткрытие лог-файлов
Взято с
Как его удалить после установки?))
Честно говоря в упор не вижу что бы вы отключали кеш для админки joomla . Насколько я знаю он отключается proxy_cache off;
apache+joomla+nginx. Как отключить nginx кеширование для авторизации пользователей на сайте (а то без авторизации корзина магазина не работает корректно)? Да так чтоб оставить кеш для анонимных пользователей.
По кукам…