Настраиваем двухуровневую архитектуру Nginx + Apache — Nginx отдаёт статику, Apache — динамику
Дата публикации: 24.06.2026

Настраиваем двухуровневую архитектуру Nginx + Apache — Nginx отдаёт статику, Apache — динамику

Хочу себе такие же кнопки
ccb9a536

Что вы получите и почему это важно

Вы научитесь построить двухуровневую архитектуру — Nginx + Apache, где первый уровень обслуживает всё, что можно отдать «как есть», а второй — выполняет PHP‑скрипты, запросы к БД и другие динамические операции. Такая схема ускоряет работу сайта, снижает нагрузку на процессор и экономит трафик‑ VDSинa, а также упрощает масштабирование: при росте посещаемости достаточно добавить ещё один Apache‑контейнер, а Nginx останется «вратарём» для статики.


1. Почему Nginx + Apache?

Плюс Nginx Apache
Обслуживание статики Супер‑быстрый — работает в режиме событий (event‑driven), не создаёт отдельный процесс на каждый запрос Не оптимизирован для большого количества одновременных запросов к файлам
Динамика Не умеет исполнять PHP «из коробки» (можно через fastcgi, но это уже Apache) Мощный модуль mod_php, поддержка .htaccess, гибкие правила пере‑писей
Конфигурирование Простая декларативная конфигурация, минимум «потоков» Богатый набор директив, возможность «перехватывать» запросы на уровне каталога
Масштабирование Легко добавить новые серверы в upstream‑блок Требует отдельного процесса/контейнера для каждой копии

Именно сочетание Nginx (как «фронтенд‑прокси») и Apache (как «бэкенд‑приложение») даёт лучшее из обоих миров.


2. План установки

  1. Подготовить VDS – установить оба веб‑сервера, настроить файрвол.
  2. Сконфигурировать Nginx – создать блок server, задать корневой каталог, прописать правила для статики и прокси‑перенаправления.
  3. Сконфигурировать Apache – включить mod_php, задать DocumentRoot, настроить VirtualHost.
  4. Тестировать – убедиться, что статические файлы отдаются Nginx, а PHP‑скрипты Apache.
  5. Оптимизировать – добавить кэш, gzip, HTTP/2, настроить таймауты.

3. Установка и базовая настройка

3.1. Установка пакетов

# Debian/Ubuntu
apt update
apt install nginx apache2 php-fpm libapache2-mod-php
# CentOS/RHEL
yum install epel-release
yum install nginx httpd php-fpm

Важно: если планируете использовать php-fpm, то Nginx будет обращаться к нему напрямую, а Apache будет работать в режиме mod_php. В данном уроке мы оставляем mod_php для простоты.

3.2. Открываем порты

# Пример для ufw
ufw allow 80/tcp
ufw allow 443/tcp
ufw reload

3.3. Отключаем конфликтующие сервисы

systemctl stop apache2   # временно, чтобы Nginx мог слушать 80
systemctl disable apache2

4. Конфигурация Nginx

Создаём файл /etc/nginx/sites-available/bitrix.conf (или редактируем /etc/nginx/nginx.conf).

# /etc/nginx/sites-available/bitrix.conf
server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/bitrix;          # путь к корню сайта

    # 1️⃣ Статика – обслуживается Nginx
    location ~* \.(jpg|jpeg|png|gif|css|js|ico|svg|woff2?)$ {
        expires 30d;
        access_log off;
        try_files $uri =404;
    }

    # 2️⃣ PHP‑скрипты – прокси‑перенаправление в Apache
    location ~ \.php$ {
        proxy_pass http://127.0.0.1:8080;
        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;
    }

    # 3️⃣ Остальные запросы – тоже в Apache
    location / {
        proxy_pass http://127.0.0.1:8080;
        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;
    }
}

Ключевые моменты

  • root указывает, где Nginx будет искать файлы.
  • Регулярное выражение ~* — «нечувствительно к регистру».
  • expires 30d заставляет браузер кэшировать статику длительное время, что экономит трафик.
  • proxy_pass отправляет запросы на локальный Apache, работающий на порту 8080 (по умолчанию Apache слушает 80, но мы меняем его, чтобы не конфликтовать с Nginx).

4.1. Включаем сайт и перезапускаем

ln -s /etc/nginx/sites-available/bitrix.conf /etc/nginx/sites-enabled/
nginx -t && systemctl restart nginx

5. Конфигурация Apache

Редактируем /etc/apache2/ports.conf – меняем порт прослушивания:

Listen 8080

Создаём VirtualHost в /etc/apache2/sites-available/bitrix.conf:

<VirtualHost *:8080>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/bitrix

    <Directory /var/www/bitrix>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    # Логи (можно направить в отдельный файл)
    ErrorLog ${APACHE_LOG_DIR}/bitrix_error.log
    CustomLog ${APACHE_LOG_DIR}/bitrix_access.log combined
</VirtualHost>

5.1. Включаем модуль и сайт

a2enmod php7.4   # версия может отличаться
a2ensite bitrix
systemctl restart apache2

Теперь Apache принимает запросы от Nginx на 8080, исполняет PHP и отдаёт HTML‑ответы.


6. Тестирование

  1. Статический файл – откройте http://example.com/logo.png.
    • В браузере в инструментах сети должно быть 200 OK от nginx (проверьте заголовок Server: nginx).
  2. PHP‑скрипт – откройте http://example.com/index.php.
    • Должен быть заголовок Server: Apache/2.4.XX (Debian) (или аналогичный).

Если оба запроса работают, архитектура готова.


7. Оптимизация

Что Как Зачем
Gzip‑сжатие gzip on; gzip_types text/plain text/css application/javascript; в блоке http Уменьшает объём передаваемых данных
HTTP/2 listen 443 ssl http2; в Nginx Меньше задержек, мультиплексирование
Кеширование PHP proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=phpcache:10m; + proxy_cache phpcache; в location ~ \.php$ Сокращает количество запросов к Apache
Таймауты proxy_read_timeout 60; Защищает от «залипания» соединений

8. Часто задаваемые вопросы

Вопрос Ответ
Что если у меня уже работает Apache на 80? Перенастройте его на 8080 (см. Listen 8080) и оставьте Nginx на 80.
Как добавить HTTPS? Сгенерируйте сертификат (Let's Encrypt) и добавьте listen 443 ssl; в блок server. Nginx будет выполнять TLS‑терминацию.
Можно ли использовать php-fpm вместо mod_php? Да. В этом случае в Nginx меняем location ~ \.php$ на fastcgi_pass unix:/run/php/php7.4-fpm.sock;. Apache будет обслуживать только статические файлы.
Как проверить, что запрос действительно прошёл через Nginx? В логах Nginx (access.log) будет строка с кодом 200 и именем файла, а в логах Apache – запись о том же запросе, но уже после прокси.

9. Практика для закрепления

  1. Создайте собственный виртуальный хост

    • Установите Nginx и Apache на чистый VDS.
    • Настройте их согласно уроку, заменив example.com на ваш домен.
    • Проверьте, что статический файл отдаётся Nginx, а PHP‑скрипт Apache.
  2. Включите кэширование PHP‑ответов

    • Добавьте в конфигурацию Nginx proxy_cache_path и proxy_cache.
    • Установите proxy_cache_valid 200 1m;.
    • Сравните время отклика до и после кэширования (используйте curl -w "%{time_total}\n").
  3. Переключите Nginx на HTTPS

    • Получите бесплатный сертификат от Let’s Encrypt (можно воспользоваться certbot).
    • Добавьте в блок server директивы ssl_certificate и ssl_certificate_key.
    • Убедитесь, что браузер показывает «защищённое соединение» и что статика всё ещё отдаётся Nginx.
  4. Оптимизируйте таймауты

    • Установите proxy_read_timeout 30; и proxy_connect_timeout 5;.
    • Сымулируйте «долгий» запрос к PHP (например, sleep(20);).
    • Проверьте, как меняется поведение клиента и логов.
  5. Анализ логов

    • С помощью awk и grep найдите в логе Nginx все запросы к файлам .css и подсчитайте их количество.
    • Сравните с количеством запросов к PHP в логе Apache.
    • Сделайте вывод о доле статики в общем трафике сайта.

10. Что дальше?

  • Балансировка нагрузки – добавить несколько Apache‑инстансов в upstream‑блок Nginx.
  • Контейнеризация – упаковать каждый сервер в Docker‑контейнер и управлять ими через docker‑compose.
  • Мониторинг – подключить Grafana + Prometheus, собирая метрики nginx_status и apache_status.

Эти шаги помогут вам поддерживать высокую производительность даже при росте посещаемости и объёма данных.


Если вам нужен надёжный VDS‑хостинг с поддержкой такой архитектуры, обратите внимание на VDSina.

Удачной настройки!


CamZamZam - онлайн фото с вебкамеры с эффектами
Cartoon Network: игры с персонажами
Чат рулетка в 2026: будущие функции
Эксперт по доменным стратегическим решениям
Хостинг для e-commerce проектов
Как играть в слоты
Как настроить CDN для сайта на хостинге Host.bg
Как настроить SSL-сертификат для сайта на Host.bg
Как оптимизировать производительность сайта с хостингом Host.bg
Как выбрать правильный хостинг для вашего сайта
Какие бывают ЛОР болезни у детей
Кассовые терминалы с оплатой картами
LOL куклы витрина детская
Лучшие видеорегистраторы для водителей
Онлайн QR-код сканер
Онлайн-связь
Оптимизация производительности баз данных на хостинге Host.bg
Основы настройки веб-хостинга: что вам нужно знать
Партнёрская программа без блога: как получать трафик из Telegram
Профессиональные хитрости для пользователей хостинга Host.bg
Регистрация ИП в Москве для иностранных граждан
Сравнение хостинга Host.bg с другими провайдерами
Субтитры — нет, уши — включены: погружение в английский за 5 минут
Сумки с бусинами
Техника для строительства загородных трасс
ТОП-10 VPS для разработчика: рейтинг серверов под рабочие задачи
WordPress блог для бизнеса
рейтинг хостингов 2026 Быстрые VDS серверы