Підступна війна росії проти України. Орієнтовні втрати ворога
(станом на 23.07.2026)
1434690
осіб
438
літаків
354
гелікоптерів
12191
танків
24994
ББМ
46570
артилерія
1515
ППО
1961
РСЗВ
124243
машин
34
кораблі і катери

Тандем Nginx + Apache 🤝 Як поєднати швидкість та гнучкість

28/10/2025

У світі веб-серверів часто говорять про протистояння Nginx vs Apache. Але що, якби я сказав вам, що їх можна не протиставляти, а змусити працювати разом, доповнюючи сильні сторони один одного? Саме така ідея лежить в основі популярної конфігурації, де Nginx виступає в ролі реверс-проксі перед Apache.

Я сам довгий час використовував таку зв’язку на багатьох проєктах і вважаю, що розуміння її принципів є ключовим для будь-якого системного адміністратора чи веб-розробника, який прагне оптимізувати роботу сайту. Давайте розберемося, як це працює і коли це може бути найкращим рішенням.

 

Навіщо ставити Nginx перед Apache? Основна ідея

Ідея проста: ми використовуємо Nginx для того, що він робить найкраще, а Apache — для його унікальних переваг.

  • Nginx (Фронтенд): Він “зустрічає” всіх відвідувачів (слухає стандартні порти 80 та 443). Його завдання:
    • ⚡️ Блискавично віддавати статичний контент (картинки, CSS, JS), не турбуючи Apache.
    • 🛡️ Ефективно обробляти велику кількість одночасних з’єднань та повільних клієнтів.
    • 🔄 Передавати запити на динамічний контент (наприклад, PHP-скрипти) на Apache.
    • (Опціонально) Виконувати SSL-термінацію, кешування, балансування навантаження.
  • Apache (Бекенд): Він працює “за спиною” Nginx, слухаючи на іншому, нестандартному порту (наприклад, 8080). Його завдання:
    • ⚙️ Виконувати динамічний контент (наприклад, PHP через mod_php).
    • 📝 Обробляти правила з файлів .htaccess, надаючи гнучкість налаштування для користувачів.
    • 🧩 Використовувати специфічні модулі Apache, яких немає в Nginx.

Таким чином, ми отримуємо краще з обох світів: швидкість Nginx для статики та з’єднань + гнучкість Apache для динаміки та конфігурації.

 

Переваги та недоліки такої зв’язки

 

Плюси 👍

  • Прискорення сайту: Nginx значно швидше віддає статику, що зменшує час завантаження сторінки.
  • Краща стійкість до навантажень: Nginx ефективніше обробляє велику кількість з’єднань, захищаючи повільніший Apache від перевантаження.
  • Збереження гнучкості .htaccess: Користувачі (особливо на віртуальному хостингу) можуть продовжувати використовувати звичні .htaccess для редиректів, правил доступу тощо.
  • Додаткові можливості: Nginx може взяти на себе кешування, SSL, базовий захист від DDoS, розвантаживши Apache.

 

Мінуси 👎

  1. Складніша конфігурація: Потрібно налаштовувати два веб-сервери замість одного.
  2. Більше споживання ресурсів: Запуск двох веб-серверів вимагає трохи більше пам’яті та CPU, ніж один Nginx + PHP-FPM.
  3. Можливі проблеми з визначенням IP: Apache буде бачити всі запити як такі, що надходять від Nginx (з IP-адреси сервера). Потрібно додатково налаштовувати передачу реальної IP-адреси клієнта (заголовки X-Forwarded-For).

 

Практика: як налаштувати Nginx як реверс-проксі для Apache

Давайте я покажу базову конфігурацію. Припустимо, Apache вже налаштований і працює на порту 8080, а Nginx буде слухати порт 80.

 

Крок 1: налаштування Apache

Переконайтеся, що Apache слухає нестандартний порт. Відредагуйте файл конфігурації портів (зазвичай /etc/apache2/ports.conf):

# Listen 80
Listen 8080 
# Listen 443 https (якщо використовуєте SSL на Apache, що зазвичай не потрібно в цій схемі)

Також змініть порт у конфігурації вашого віртуального хоста (/etc/apache2/sites-available/my-site.conf):

# Замість <VirtualHost *:80>
<VirtualHost *:8080>
    # ... решта конфігурації ...
</VirtualHost>

Перезапустіть Apache: sudo systemctl restart apache2.

 

Крок 2: налаштування Nginx

Тепер налаштуємо Nginx, щоб він слухав порт 80, віддавав статику сам, а все інше проксіював на Apache.

Створіть або відредагуйте конфігурацію сайту в Nginx (наприклад, /etc/nginx/sites-available/my-site-proxy.conf):

server {
    listen 80;
    server_name example.com www.example.com;    
    # Коренева папка сайту (та сама, що й в Apache)
    root /var/www/my-site/public;
    index index.php index.html index.htm;
    # Спочатку намагаємося віддати статичний файл
    location / {
        try_files $uri $uri/ @apache; # Якщо файлу немає, передаємо на Apache
    }
    # Пряма віддача популярної статики (оптимізація)
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 7d; # Кешуємо статику
        # try_files $uri =404; # Можна додати, щоб не турбувати Apache, якщо файлу немає
    }
    # Блок для передачі запитів на Apache
    location @apache {
        proxy_pass http://127.0.0.1:8080; # Адреса та порт, де слухає Apache
        # Передача реальної IP-адреси клієнта та інших заголовків
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    # Забороняємо доступ до .htaccess (Nginx їх не використовує)
    location ~ /\.ht {
        deny all;
    }
}

Увімкніть конфігурацію та перезавантажте Nginx:

sudo ln -s /etc/nginx/sites-available/my-site-proxy.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

 

Важливий момент про передачу IP-адреси

Щоб Apache бачив реальну IP-адресу відвідувача (а не IP вашого сервера), потрібно встановити та налаштувати модуль mod_remoteip (для Apache 2.4+) або mod_rpaf (для старих версій). Він буде читати заголовок X-Forwarded-For, який ми передаємо з Nginx.

 

Висновок: коли компроміс є найкращим рішенням?

Хоча для нових проєктів я зазвичай рекомендую використовувати чисту зв’язку Nginx + PHP-FPM через її простоту та ефективність, тандем Nginx + Apache все ще має право на життя. На мою думку, він є чудовим компромісним рішенням, коли:

  • Ви працюєте на віртуальному хостингу, де немає можливості налаштувати PHP-FPM, але хочете прискорити сайт.
  • Ваш проєкт сильно залежить від специфічних модулів Apache або активно використовує складні правила в .htaccess.
  • Ви хочете поступово мігрувати з Apache на Nginx, використовуючи Nginx спочатку як кешуючий проксі.

Це класична, перевірена часом архітектура, яка дозволяє отримати значний приріст продуктивності, зберігши при цьому гнучкість Apache. Головне — розуміти, як вона працює, та правильно її налаштувати.

 

Категорії:

Перегляди 967
розкажіть друзям:

Напишіть тут свою думку/питання

Ваша пошта не публікуватиметься. Обов’язкові поля позначені *