Crmgo Blog

Apache & Nginx

Apache & Nginx

Zašto je potrebna kombinacija Apache & Nginx, naravno, možete potražiti i u drugim delovima neizmerne mreže, ali ja sam biciklista, pa ću napisati svojim rečima. Tokom rada Apache web servera, on pri svakom novom povezivanju generiše novi…

Apache & Nginx

Зачем нужна связка 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"';

Далее приведены настройки, взятые с какого-то уважаемого ресурса, и, по крайней мере, пока я не вдавался в их подробности:

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 порта. Хочу обратить внимание, что если вы в конфиге 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
ссылка на статью

Napomena: tekst može biti uz pomoć AI uz ljudsku proveru. Odgovoran: Dmytro Lomaka, Kaltenkirchen.