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;
}
Надеюсь эта статья облегчит жизнь Вашему серверу. :)

 

Вы можете оставить комментарий, или поставить трэкбек со своего сайта.

16 комментариев(я)

(Обязательно)
(Обязательно, не публикуется)

Пропала собака. yandex.ru не предлагать.
Яндекс.Метрика beget