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