Photo by Land O’Lakes, Inc.
Настройка Nginx+Apache

Популярные ошибки в настройке Nginx+Apache для WordPress и способы их исправления

26.11.25

Связка Nginx (фронтенд) + Apache (бэкенд) остаётся «золотым стандартом» для многих серверов, она сочетает скорость выдачи статики Nginx-ом, гибкостью Apache и возможностью использовать .htaccess. Однако при настройке этого тандема для WordPress сисадмины часто сталкиваются с неочевидными проблемами, которые приводят к циклическим редиректам, ошибкам 502 или нерабочим ЧПУ.

Ниже разобраны самые частые ошибки конфигурации и методы их решения.

Бесконечный редирект (ERR_TOO_MANY_REDIRECTS)

Это классическая проблема при работе Nginx как прокси перед Apache, особенно при настройке SSL.

Причина: Nginx принимает HTTPS-запрос, расшифровывает его и передаёт на Apache как обычный HTTP (обычно на порт 8080). WordPress, видя незащищённое соединение, снова перенаправляет пользователя на HTTPS. Этот цикл повторяется бесконечно.

Решение:


Необходимо передать Apache заголовок, сообщающий, что исходный запрос был защищённым.

Необходимо добавить в конфигурацию Nginx в location:

proxy_set_header X-Forwarded-Proto $scheme;

и далее в настройках виртуального хоста в Apache устанавливаем:

SetEnvIf X-Forwarded-Proto https HTTPS=on
RequestHeader set X-Forwarded-Proto "https"

В логах все посетители имеют одинаковые IP адреса (адреса самого сервера)

Это частая ошибка «Real IP»

Причина: Apache видит только один входящий IP (обычно это 127.0.0.1 адрес Nginx), так как запросы приходят от него. Это ломает работу плагинов безопасности (Wordfence, Limit Login Attempts и т.д.) и всю аналитику запросов.

Решение:


Нужно установить модуль mod_remoteip для Apache (обычно он уже есть в современных сборках) и настройть его.
 В конфигурации Apache ( /etc/apache2/mods-enabled/remoteip.conf ) добавляем:

RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1

И в Nginx соответственно, проверяем что передаём реальный IP:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Проблемы с загрузкой больших файлов (Ошибка 413 Request Entity Too Large)

Причина: По умолчанию Nginx ограничивает размер загружаемого тела запроса (часто 1Мб). При попытке загрузить тему или плагин через админку WordPress получаем ошибку, даже если в PHP с лимитами все норм.

Решение:


Надо увеличить лимит в секции http, server или location файла nginx.conf :

client_max_body_size 64M;

Ну и проверить параметры upload_max_filesize и post_max_size в php.ini для Apache. Значение в них должно совпадать или превышать этот лимит.

Ошибка 502 Bad Gateway / 504 Gateway Time-out

Причина: Apache не успевает обработать «тяжелый» скрипт (например, импорт товаров или создание резервной копии) и Nginx разрывает соединение по таймауту раньше времени.

Решение:


Нужно увеличить время ожидания ответа от бэкенда в конфигурации Nginx:

proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;

Это даст Apache больше времени на выполнение ресурсоёмких задач, прежде чем Nginx вернет ошибку

Некорректная обработка статики (jpeg/CSS/JS ответ 404)

Причина: в Nginx неправильно определен root (путь до корня сайта), из-за чего он отдает 404 на существующие файлы.

Решение:


При настройке статики ( location ~* .(jpg|jpeg|gif|png|css|js)$ ) в Nginx надо прописать путь root так, чтобы он совпадал с реальным расположением файлов сайта (DocumentRoot в Apache).

location ~* ^.+.(jpg|jpeg|gif|png|webp|svg|js|css|mp3|ogg|mpeg|avi|zip|gz|bz2|rar)$ {
    root /var/www/html; # Путь до корня сайта
    access_log off;
    expires 365d;
}

Ну и указывайте параметр expires в 1 год. Вот полезная инфа об этом.