Зачем нужна связка Apache и Nginx, можно, конечно, поискать и в других уголках необъятной Сети, но я — велосипедист, поэтому напишу своими словами. В процессе работы веб-сервера Apache при каждом новом подключении к нему порождается новый процесс, и даже если нет ни одного подключения к серверу, в системе неизменно присутствует 4-5 процессов httpd. Таким образом, Apache порождает неограниченное количество процессов, что, конечно же, сказывается на объеме свободной оперативной памяти и повышенной нагрузке на процессор сервера. Nginx позволяет снизить эту нагрузку многократно. Данная связка веб-серверов работает примерно так: на фронтенде (frontend) ставится Nginx, который принимает все входящие подключения от пользовательских агентов ваших посетителей. Далее, если запрашивается статический контент, такой как HTML-страницы, фотографии или расшаренные файлы, Nginx сам обрабатывает данный запрос и максимально быстро отдает его клиенту. Если же требуется обработка какого-либо PHP-скрипта, то Nginx, перехватив запрос от клиента, передает его Apache (backend), который, в свою очередь, с помощью своего mod_php обрабатывает скрипт и отдает Nginx уже готовые данные. При этом количество запущенных процессов Apache не растет (у Apache в такой связке, как я понимаю, всего одно подключение с 127.0.0.1, на котором он принимает запросы от Nginx). Если говорить еще проще, то Nginx — это легкая прослойка между клиентом и основным мощным веб-сервером, позволяющая не плодить процессы Apache, тем самым экономя драгоценный RAM. Теперь о настройке. Так как я не использую Debian и прочие Ubuntu, опишу процесс установки и настройки в рамках Arch Linux.
sudo pacman -S nginx
После установки Nginx нужно настроить (у вас он, наверняка, уже есть) Apache. Открываем конфиг:
sudo nano -w /etc/httpd/conf/httpd.conf
Ищем строчку
ServerRoot "/etc/httpd" Listen 80
и исправляем на 8080 (по умолчанию Apache слушает основной 80 порт). Теперь Apache будет ждать подключения на 8080 порту, куда и будет отправлять запросы на обработку скриптов наш Nginx. В общем-то, с конфигом Apache мы закончили, больше там, по крайней мере, я ничего не правил. Теперь приступим к Nginx:
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"';
Далее приведены настройки, взятые с какого-то уважаемого ресурса, и, по крайней мере, пока я не вдавался в их подробности:
Сжатие gzip я отключил, хоть все и советуют его включать, но у меня после его включения неистово зашуршал диск, и я решил его вырубить. Теперь настройки самого сервера: Настраиваем Nginx на прослушку 80 порта. Хочу обратить внимание, что если вы в конфиге Apache поставили прослушку 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;
Ova linija predstavlja putanju do datoteke dnevnika u koju će se zapisivati informacije o hostovima koji se povezuju na nginx. Svuda gde sam čitao o konfiguraciji nginx-a, svi su pokušavali da omoguće rad statistike putem nekih dodatnih modula, ali u ovom slučaju, ako već imate pokrenut awstats na Apache-u, potrebno je samo da u postavkama awstats-a navedete novi dnevnik (u ovom slučaju host.access.log) za prikupljanje statistike. Liniju location ostavljamo nepromenjenom.
location / {
Zatim tražimo liniju proxy:
proxy_pass http://127.0.0.1:8080/;
Ovde navodimo adresu i port na koje ćemo prosleđivati zahteve; ovaj port sluša Apache, što je upravo ono što nam je potrebno. Još jedna važna linija je root, odnosno lokacija datoteka servera u odnosu na fajl sistem; kod mene je to ovde:
root /srv/http;
Zatim restartujemo Apache
sudo /etc/rc.d/httpd restart
i pokušavamo da pokrenemo nginx:
sudo /etc/rc.d/nginx start
ссылка на статью
