Перейти к содержимому

nginx и PHP-FPM в 1С-Битрикс - связка, редиректы, статика

Веб-сервер - вторая по объёму подтема инфраструктуры: 244 вопроса из собранных. Здесь собраны решения по nginx и связке с обработчиком PHP.

Что общего у этих задач

В окружении работают два веб-сервера сразу. nginx стоит спереди и отдаёт статику, Apache позади обрабатывает PHP через .htaccess. Связка удобна тем, что переносит проекты без переписывания правил, но означает: часть правил живёт в одном сервере, часть в другом, и искать поломку надо в обоих.

Статику nginx отдаёт мимо PHP и мимо .htaccess. Существующий файл он возвращает сам, не спрашивая Apache. Поэтому заголовки кеширования, ограничения доступа и редиректы, прописанные в .htaccess, на статику не действуют - их задают в конфиге nginx.

Редиректы бывают на трёх уровнях: nginx, .htaccess и код платформы. Они выполняются в этом порядке, и правило верхнего уровня отменяет всё нижнее. Отсюда типовая картина, когда правило в админке не работает: его перехватил nginx.

Ошибки веб-сервера видны только в его журналах. Страница показывает общий код ответа, а причина лежит в журнале nginx или обработчика PHP, и разбор всегда начинается там.

С чего начать

Начинают с журналов: что записал nginx и что записал обработчик PHP в момент проблемы. Эти два файла отвечают на большинство вопросов о кодах ответа.

Дальше проверяют, на каком уровне живёт нужное правило. Редирект, заголовки кэширования и ограничение доступа задают в конфиге веб-сервера, а не в коде сайта.

Последним смотрят на пределы: число процессов обработчика, время ожидания ответа и размер принимаемого запроса. Под нагрузкой именно они превращаются в коды ошибок на витрине.

Решения подтемы

Частые вопросы

Зачем нужен Apache, если есть nginx?

Ради .htaccess: правила из него читает Apache, и платформа рассчитывает на это. Связка позволяет переносить проекты между хостингами без переписывания конфигов веб-сервера.

Можно ли работать только на nginx с PHP-FPM?

Да, и это быстрее, но правила из .htaccess придётся перенести в конфиг nginx руками. Модули и решения, которые кладут свои правила в .htaccess, после такого перехода перестают работать молча.

Почему редирект из админки не срабатывает?

Скорее всего его перехватывает nginx или .htaccess: они отрабатывают раньше кода платформы. Проверяют по порядку сверху вниз, начиная с конфига nginx.

Почему после смены домена часть страниц уходит на старый адрес?

Старый домен остался в настройках сайта, в правилах nginx или в закешированных страницах композита. Каждое из трёх мест правится отдельно.

Связанные темы

Первоисточники