Гид по технологиям

Как настроить Nginx как обратный прокси для Apache на CentOS 8

• 4 min read • Серверы • Обновлено 24 Nov 2025
Nginx как обратный прокси для Apache на CentOS 8
Nginx как обратный прокси для Apache на CentOS 8

Кратко

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

Иллюстрация: архитектура Nginx и Apache на одном сервере

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().

Страница phpinfo() сервера Apache

Важно

Если у вас 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.

Страница phpinfo() через Nginx как обратный прокси

Проверка и отладка

  1. Ответы и порты:
    • ss -antpl | grep nginx
    • ss -antpl | grep httpd
  2. Логи:
    • Nginx: /var/log/nginx/error.log и access.log
    • Apache: /var/log/httpd/error_log и access_log
  3. SELinux: если включён, проверьте audit.log и применяйте соответствующие флаги или контексты (semanage, restorecon).
  4. Фаервол: откройте порт 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) и их нельзя переместить.
  • При ограничениях операционной системы или политик безопасности, не допускающих множественные слушающие сервисы.

Методология настройки (коротко)

  1. Устанавливайте компоненты по очереди и проверяйте работу на каждом шаге.
  2. Переносите Apache на неконфликтный порт (например, 8080).
  3. Настройте Nginx как обратный прокси с явной обработкой статичных файлов.
  4. Тестируйте снаружи, проверяйте заголовки и логи.

Модель принятия решения (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 и сложной логики.
  • Обязательно тестируйте и защищайте доступы.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро