Apache & Nginx

Для чего нужна связка Apache & Nginx можно конечно поискать и в других уголках необъятной Сети, но я ж велосипедист и поэтому напишу своими словами. В процессе работы Web сервера Apache он при каждом новом подключении к нему парождает новый процесс, даже если нет ни одного подключению к серверу, то неизменно 4-5 процессов httpd имеется в системе. Тем самым апач плодит n-ное количество процессов, что конечно же сказывается на объеме свободной оперативной памяти и повышенной нагрузке на процессор сервера. Nginx позволяет снизить эту нагрузку в много раз. Данная связка веб серверов примерно такая на фронтенд (frontend) ставится энджинкс который и ловит все входящие подключения от юзер-агентов ваших посетителей. Далее, если запрашивается статический контент такой как html страницы, фотографии, расшаренный файл, то nginx сам обрабатывает данный запрос и максимально быстро отдает его клиенту. Если же требуется обработка какого либо php скрипта, то nginx отловив запрос от клиента отдает его апачу (backend) а тот уже в свою очередь с помощью своего mod_php обрабатывает скрипт и отдает nginx’у уже готовые данные при этом количество запущенных процессов Апача не растет ( у апача в такой связке как я понимаю всего одно подключение с 127.0.0.1 на котором он принимает запросы от nginx). Если говорить еще проще то nginx это легкая прослойка между клиентом и основным мощным веб сервером позволяющая не плодить процессов Апача сберегая тем самым драгоценный RAM. Теперь о настройке. Так как я не юзаю дебианы и прочие убунты опишу процесс установки и настройки в рамках Arch Linux.

sudo pacman -S nginx

После установки nginx надо настроить (у вас он наверняка уже есть) Апач. Открываем конфиг:

sudo nano -w /etc/httpd/conf/httpd.conf

Ищем строчку

ServerRoot "/etc/httpd"
Listen 80

и исправляем на 8080 (по умолчанию Апач слушает основной 80 порт) теперь Апач будет ждать подключения на 8080 порту куда и будет отправлять запросы на обработку скриптов наш nginx. Вобщем то с конфигом Apache мы закончили, больше там по крайней мере я ничего не правил. Теперь приступим к энджинксу:

sudo nano -w /etc/nginx/conf/nginx.conf

Нужно будет раскомментировать некоторые строки. В самой первой раскоменчиваем строку «user» и вписываем туда своего юзера, чаще всего это http. дальше пропишем куда nginx будет писать логи ошибок:

error_log  /var/log/httpd/error.log  notice;

Далее если мы хотим использовать awstats для подсчета статистики посещения раскоменчиваем это:

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 on;
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
client_max_body_size 20m;
tcp_nodelay on;
client_header_timeout 30;
client_body_timeout 30;
send_timeout 30;
client_header_buffer_size 4k;
large_client_header_buffers 4 4k;
output_buffers 10 64K;
postpone_output 1460;
keepalive_timeout 75 20;

Сжатие gzip я отключил, хоть все и советуют его включать но у меня после его включения неистово зашуршал винт т я решил его вырубить. Теперь настройки самого сервера: Настраиваем nginx на прослушку 80 порта. Хочу обратить внимание что если вы в конфиге апача поставили прослушку 127.0.0.1:8080 то и тут надо будет указывать не listen 80, а listen 127.0.0.1:80

server {
listen 80;
server_name syslinux.ru www.syslinux.ru;
charset utf-8;
access_log /var/log/httpd/host.access.log main;

Данная строка это указание файла лога куда будет записываться инфа от хостах подключающихся к nginx. Везде где я читал о настройке nginx все пытались заставить работать статистику через какие то дополнительные модули, но в данном случае если у вас уже работает awstats на апаче то нужно всего лишь указать в настройках awstats новый лог (в данном случае это host.access.log) для сбора статы. Строку location оставляем без изменения

location / {

Далее ищем строку proxy:

proxy_pass ;

Здесь мы указываем адрес и порт куда передавать запросы, этот порт у нас слушает Апач, что нам собственно и надо. Еще одна важная строка это root — тобишь расположения файлов сервера относительно файловой системы у меня оно здесь:

root /srv/http;

Далее перезапускаем Апач

sudo /etc/rc.d/httpd restart

и пробуем запустить nginx:

sudo /etc/rc.d/nginx start

В общем то и все,подробнее почитать о тонкой настройке вы можете на оффсайте Игоря Сысоева (автор nginx) ,потому как в этих вещах я не компетентен и не хочу давать советов если я не убежден в их правильности. Я лишь попытался поделиться опытом и написать все как можно подробнее и понятнее для новичков коим сам и являюсь.

Оцените статью