Для чего нужна связка 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) ,потому как в этих вещах я не компетентен и не хочу давать советов если я не убежден в их правильности. Я лишь попытался поделиться опытом и написать все как можно подробнее и понятнее для новичков коим сам и являюсь.