Настраиваем двухуровневую архитектуру Nginx + Apache — Nginx отдаёт статику, Apache — динамику
Хочу себе такие же кнопкиЧто вы получите и почему это важно
Вы научитесь построить двухуровневую архитектуру — Nginx + Apache, где первый уровень обслуживает всё, что можно отдать «как есть», а второй — выполняет PHP‑скрипты, запросы к БД и другие динамические операции. Такая схема ускоряет работу сайта, снижает нагрузку на процессор и экономит трафик‑ VDSинa, а также упрощает масштабирование: при росте посещаемости достаточно добавить ещё один Apache‑контейнер, а Nginx останется «вратарём» для статики.
1. Почему Nginx + Apache?
| Плюс | Nginx | Apache |
|---|---|---|
| Обслуживание статики | Супер‑быстрый — работает в режиме событий (event‑driven), не создаёт отдельный процесс на каждый запрос | Не оптимизирован для большого количества одновременных запросов к файлам |
| Динамика | Не умеет исполнять PHP «из коробки» (можно через fastcgi, но это уже Apache) | Мощный модуль mod_php, поддержка .htaccess, гибкие правила пере‑писей |
| Конфигурирование | Простая декларативная конфигурация, минимум «потоков» | Богатый набор директив, возможность «перехватывать» запросы на уровне каталога |
| Масштабирование | Легко добавить новые серверы в upstream‑блок | Требует отдельного процесса/контейнера для каждой копии |
Именно сочетание Nginx (как «фронтенд‑прокси») и Apache (как «бэкенд‑приложение») даёт лучшее из обоих миров.
2. План установки
- Подготовить VDS – установить оба веб‑сервера, настроить файрвол.
- Сконфигурировать Nginx – создать блок
server, задать корневой каталог, прописать правила для статики и прокси‑перенаправления. - Сконфигурировать Apache – включить
mod_php, задатьDocumentRoot, настроитьVirtualHost. - Тестировать – убедиться, что статические файлы отдаются Nginx, а PHP‑скрипты Apache.
- Оптимизировать – добавить кэш, 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. Тестирование
- Статический файл – откройте
http://example.com/logo.png.- В браузере в инструментах сети должно быть
200 OKот nginx (проверьте заголовокServer: nginx).
- В браузере в инструментах сети должно быть
- 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. Практика для закрепления
-
Создайте собственный виртуальный хост
- Установите Nginx и Apache на чистый VDS.
- Настройте их согласно уроку, заменив
example.comна ваш домен. - Проверьте, что статический файл отдаётся Nginx, а PHP‑скрипт Apache.
-
Включите кэширование PHP‑ответов
- Добавьте в конфигурацию Nginx
proxy_cache_pathиproxy_cache. - Установите
proxy_cache_valid 200 1m;. - Сравните время отклика до и после кэширования (используйте
curl -w "%{time_total}\n").
- Добавьте в конфигурацию Nginx
-
Переключите Nginx на HTTPS
- Получите бесплатный сертификат от Let’s Encrypt (можно воспользоваться
certbot). - Добавьте в блок
serverдирективыssl_certificateиssl_certificate_key. - Убедитесь, что браузер показывает «защищённое соединение» и что статика всё ещё отдаётся Nginx.
- Получите бесплатный сертификат от Let’s Encrypt (можно воспользоваться
-
Оптимизируйте таймауты
- Установите
proxy_read_timeout 30;иproxy_connect_timeout 5;. - Сымулируйте «долгий» запрос к PHP (например,
sleep(20);). - Проверьте, как меняется поведение клиента и логов.
- Установите
-
Анализ логов
- С помощью
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 блог для бизнеса