Установка и настройка nginx для уменьшения нагрузки Apache
На файловом сервере в данный момент не очень много оперативки и как выяснилось в ходе тестов при некоторых условиях Apache умудряется захавать довольно много, что пришлось даже уменьшать число коннектов, которые держатся долго из-за большого размера файлов. Посоветовали использовать дополнительный легкий и быстрый вебсервер для раздачи статического содержимого. На место такого рекомендовали nginx. Опыта его использования у меня не было, поэтому разбирался с нуля. Так что если у вас будут советы или полезные дополнения, буду благодарен, если вы напишите их в комментариях.
1) Установка:
— Качаем дистрибутив NGINX с сайта автора: http://sysoev.ru/nginx/download.html
За собой он тянет:
— библиотеки PCRE: http://www.pcre.org/
— библиотеки zlib: http://www.gzip.org/zlib/
Все 3 архива с исходниками качаем с помощью wget например сюда: /var/tmp/
Распаковываем все три дистрибутива.
Переходим в папку с nginx-0.8.43. Запускаем конфигуратор:
./configure
—sbin-path=/usr/local/nginx/nginx
—conf-path=/usr/local/nginx/nginx.conf
—pid-path=/usr/local/nginx/nginx.pid
—with-pcre=../pcre-4.4
—with-zlib=../zlib-1.1.3
Подробно об опциях конфигуратора здесь: http://sysoev.ru/nginx/docs/install.html
Если все прошло удачно (у меня там вываливались какие-то проблемы которые я решал просто следуя советам конфигуратора), то сам бинарник nginx будет лежать здесь: /usr/local/nginx/nginx, файл конфигурации здесь: /usr/local/nginx/nginx.conf
2) Настройка конфигурации:
Здесь возможно два варианта. В первом nginx работает параллельно с Apache на другом порту или на другом IP (я делал таким образом). Второй вариант когда nginx работает как прослойка между пользователем и Apache. Сложные запросы, отдавая тяжелому и медленному Апачу, а статику (картинки и видео раздавая напрямую) почти не потребляя ресурсов.
Об этих двух вариантах написано здесь: http://server-tuning.info/nginx/
По важным настройкам конфигурационного файла здесь: http://habrahabr.ru/blogs/nginx/66764/
Пример конфигурационного файла здесь: http://sysoev.ru/nginx/docs/example.html
Мой выглядит следующим образом:
user nobody;
worker_processes 2;
error_log logs/error.log;
pid logs/nginx.pid;
events {
worker_connections 2048;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr — $remote_user [$time_local] «$request» ‘
‘$status $body_bytes_sent «$http_referer» ‘
‘»$http_user_agent» «$http_x_forwarded_for»‘;
access_log logs/access.log main;
sendfile on;
keepalive_timeout 15;
server {
listen 8080;
server_name localhost example.ru www.example.ru;
location /download/ {
root /var/www/example.ru/data/public_html;
}
}
}
Если вкратце, то при обращении к папке /download/ на сервере по 8080 порту, файлики оттуда раздает nginx. То есть если кто-то запрашивает файл вида http://example.ru:8080/download/1.mp3 то раздачей файла будет заниматься nginx.
3) Запуск, остановка и автозапуск.
Для запуска достаточно просто запустить с консоли /usr/local/nginx/nginx для остановки /usr/local/nginx/nginx –s stop
Автозапуск после загрузки в разных операционных системах делается по-разному. Например, в CentOS или RedHat это делается так. Необходимо добавить запуск nginx в файл автозапуска: /etc/rc.d/rc.local
Его примерное содержимое после вашей правки будет выглядеть так:
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don’t
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/usr/local/nginx/nginx