Как настроить Nginx как обратный прокси для Apache на CentOS 8
Кратко
Этот пошаговый гид показывает, как объединить Nginx и Apache на одном сервере CentOS 8: Nginx служит фронтендом и обратным прокси, а Apache — обрабатывает PHP и динамику. В статье — команды, примеры конфигурации, ответы на частые ошибки и рекомендации по безопасности.

Apache и Nginx — бесплатные и широко используемые веб‑серверы. Apache часто применяется для динамических сайтов и работы с PHP, а Nginx — для быстрой раздачи статичных файлов и в роли обратного прокси. Сочетание обоих позволяет взять лучшее от каждого: Nginx обрабатывает статические ресурсы и входящие соединения, Apache — запускает PHP и модули.
В этом руководстве вы настроите Nginx как фронтенд и обратный прокси, который перенаправляет PHP‑запросы к Apache, работающему на порту 8080. Примеры команд рассчитаны на CentOS 8.
Требования
- Сервер с CentOS 8.
- Домен, указывающий на IP сервера (или тестовый хост в /etc/hosts).
- Права root или sudo.
Установка Apache и PHP
Установите Apache и PHP командой:
dnf install httpd php php-cli -yЗапустите и включите автостарт Apache:
systemctl start httpd
systemctl enable httpdКонфигурация Apache
По умолчанию Apache слушает порт 80. Для совместной работы с Nginx принято перевести Apache на другой порт — например, 8080. Отредактируйте основной конфиг:
nano /etc/httpd/conf/httpd.confНайдите строку с Listen и измените порт на 8080:
Listen 8080Сохраните файл и перезапустите службу:
systemctl restart httpdПроверьте, что Apache слушает нужный порт:
ss -antpl | grep httpdОжидаемый вывод будет содержать запись с “:8080”.
Создайте тестовую страницу PHP:
nano /var/www/html/info.phpДобавьте:
Откройте в браузере http://your-server-ip:8080/info.php — вы должны увидеть страницу phpinfo().

Важно
Если у вас SELinux включён, возможны дополнительные ограничения на доступ к файлам или портам. См. раздел “Проверка и отладка”.
Установка Nginx
Установите Nginx и включите сервис:
dnf install nginx -y
systemctl start nginx
systemctl enable nginxКонфигурация Nginx как обратного прокси для Apache
Создайте файл виртуального хоста Nginx:
nano /etc/nginx/conf.d/proxy.confПример конфигурации, которая будет проксировать PHP‑запросы на Apache (порт 8080):
server {
listen 80;
server_name test.example.com;
location ~ \.php$ {
proxy_pass http://your-server-ip: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;
}
# Дополнительно: отдача статических файлов напрямую
location / {
try_files $uri $uri/ =404;
}
}Сохраните файл и перезапустите Nginx:
systemctl restart nginxОткройте в браузере http://test.example.com/info.php — вы должны увидеть ту же страницу phpinfo(), теперь через Nginx.

Проверка и отладка
- Ответы и порты:
- ss -antpl | grep nginx
- ss -antpl | grep httpd
- Логи:
- Nginx: /var/log/nginx/error.log и access.log
- Apache: /var/log/httpd/error_log и access_log
- SELinux: если включён, проверьте audit.log и применяйте соответствующие флаги или контексты (semanage, restorecon).
- Фаервол: откройте порт 80 для внешнего доступа (firewall-cmd –add-service=http –permanent; firewall-cmd –reload).
Частые ошибки
- Пустая страница или 502 — проверьте proxy_pass и доступность Apache на порту 8080.
- Неправильные заголовки клиента — убедитесь, что proxy_set_header настроены правильно.
Альтернативные подходы и когда они подходят
- Nginx + PHP‑FPM без Apache: лучше для лёгких PHP‑приложений и когда не нужны модули Apache.
- Apache как фронтенд, Nginx как статика: редко, но применимо при специфичных Apache‑модулях.
- Использовать unix‑сокет (php-fpm) вместо TCP для локальной передачи PHP: снижает накладные расходы на сетевой стек.
Когда это не сработает
- Если приложение жёстко завязано на специфические модули Apache (mod_rewrite, mod_security) и их нельзя переместить.
- При ограничениях операционной системы или политик безопасности, не допускающих множественные слушающие сервисы.
Методология настройки (коротко)
- Устанавливайте компоненты по очереди и проверяйте работу на каждом шаге.
- Переносите Apache на неконфликтный порт (например, 8080).
- Настройте Nginx как обратный прокси с явной обработкой статичных файлов.
- Тестируйте снаружи, проверяйте заголовки и логи.
Модель принятия решения (Mermaid)
flowchart TD
A[Есть Apache с PHP?] -->|Да| B{Нужно ли ускорить отдачу статичных файлов?}
B -->|Да| C[Поставить Nginx как фронтенд и прокси]
B -->|Нет| D[Оставить Apache, оптимизировать конфиги]
A -->|Нет| E[Рассмотреть Nginx + PHP-FPM]Роль‑ориентированные чек-листы
Администратор сервера:
- Установить httpd и nginx.
- Перевести Apache на порт 8080.
- Проверить SELinux и firewall.
Разработчик:
- Убедиться, что приложение корректно работает за прокси.
- Тестировать заголовки X‑Forwarded‑For и Host.
Тестировщик:
- Проверить статические ресурсы, формы и страницы с сессиями.
- Замерить время ответа для статики и динамики.
Тесты и критерии приёмки
- По URL http://test.example.com/info.php должна возвращаться страница phpinfo().
- Статические файлы (.css, .js, изображения) отдаются Nginx напрямую.
- Заголовок Host соответствует запрошенному домену.
Безопасность и рекомендации
- Закрыть прямой доступ к порту Apache (8080) извне фаерволом.
- Включить TLS на уровне Nginx (letsencrypt или корпоративный сертификат).
- Логи: ограничьте доступ и настройте ротацию (logrotate).
- Следите за обновлениями пакетов и уязвимостями.
Совместимость и миграция
- Конфигурация подходит для CentOS 8, но перед развёртыванием проверьте поддержку и обновления ОС в вашей инфраструктуре.
- При миграции на другую дистрибутивную линейку (Debian/Ubuntu) пути конфигов и команды пакетов отличаются.
Важно
Не открывайте порт Apache в интернетную зону — пусть Apache доступен только локально (127.0.0.1 или внутренний IP), а фронтендом будет Nginx.
Краткое резюме
- Nginx служит фронтендом и проксирует PHP‑запросы на Apache, слушающий порт 8080.
- Это сочетание ускоряет отдачу статики и сохраняет совместимость с модулями Apache.
- Проверяйте логи, firewall и SELinux при неполадках.
Сводка
- Используйте Nginx для статики и как обратный прокси.
- Оставьте Apache для PHP и сложной логики.
- Обязательно тестируйте и защищайте доступы.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента