Crmgo Блог

Apache & Nginx

Apache & Nginx

Для чого потрібна зв'язка Apache & Nginx можна звісно пошукати й в інших куточках неосяжної Мережі, але я ж велосипедист і тому напишу своїми словами. У процесі роботи Web сервера Apache він при кожному новому підключенні до нього породжує новий…

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 http://127.0.0.1:8080/;

Тут ми вказуємо адресу та порт, куди передавати запити, цей порт у нас слухає Апач, що нам власне й потрібно. Ще один важливий рядок це root - тобто розташування файлів сервера відносно файлової системи, у мене воно тут:

root /srv/http;

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

sudo /etc/rc.d/httpd restart

і пробуємо запустити nginx:

sudo /etc/rc.d/nginx start
ссылка на статью

Примітка: матеріал міг бути створений за підтримки ШІ з подальшою людською редакцією. Відповідальний за зміст: Dmytro Lomaka, Kaltenkirchen.