Классическая схема Битрикс — nginx спереди, Apache или PHP-FPM сзади. Разбираем, как связать их правильно: раздача статики, проксирование динамики, композитный кеш, SSL и типичные настройки, которые определяют скорость витрины.
Архитектура связки
BitrixEnv использует двухслойную схему. nginx слушает 80/443, отдаёт статику и композитный кеш, терминирует SSL и проксирует динамические запросы на бэкенд. Apache с mod_php обрабатывает PHP и слушает внутренний порт (обычно 8888). Альтернатива Apache — PHP-FPM, к которому nginx обращается напрямую через сокет.
| Слой | Порт | Задача |
|---|---|---|
| nginx (фронт) | 80/443 | Статика, SSL, композит, проксирование |
| Apache (бэк) | 8888 | Выполнение PHP через mod_php |
| PHP-FPM (альт.) | сокет/9000 | Выполнение PHP процессами |
Конфигурация nginx
Виртуалхосты BitrixEnv лежат в /etc/nginx/bx/conf/, а общие настройки — в /etc/nginx/nginx.conf. Ключевой подключаемый файл сайта — bitrix.conf, где описаны правила ЧПУ, композит и заголовки. Минимальный серверный блок проксирования выглядит так:
location / { proxy_pass http://127.0.0.1:8888; 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;}
Статику отдаём напрямую, минуя PHP:
location ~* \.(css|js|jpg|png|webp|woff2)$ { expires 30d; access_log off; }
Композитный кеш в nginx
Композитный сайт (Composite) — главный ускоритель Битрикс: статичная часть страницы отдаётся nginx без запуска PHP. За это отвечает специальный location, который проверяет наличие файла кеша в /bitrix/html_pages/:
set $composite_file "/bitrix/html_pages/$http_host$request_uri/index@$args.html";
Если файл существует и у пользователя нет служебных cookie (авторизация, корзина), nginx отдаёт готовый HTML напрямую. В BitrixEnv эти правила уже включены в bitrix.conf — при ручной сборке их нужно добавлять самостоятельно.
BITRIX_SM_LOGIN и корзиной. Иначе пользователи увидят чужие данные — классическая ошибка кривой ручной настройки.Apache или PHP-FPM
BitrixEnv по умолчанию ставит Apache + mod_php: он проще в связке с .htaccess, которые есть в дистрибутиве. Но под высокую нагрузку PHP-FPM экономнее по памяти и лучше масштабируется пулами воркеров.
| Критерий | Apache + mod_php | nginx + PHP-FPM |
|---|---|---|
| .htaccess | Поддерживается | Правила переносят в nginx |
| Память на воркер | Выше | Ниже |
| Тонкая настройка пулов | Ограниченная | pm.max_children, pm.dynamic |
| Совместимость из коробки | Полная | Нужна миграция правил |
Пул PHP-FPM настраивается в /etc/php-fpm.d/www.conf: pm = dynamic, pm.max_children по формуле RAM/средний размер процесса, pm.max_requests = 500 против утечек памяти.
SSL и HTTP/2
SSL терминируется на nginx. В BitrixEnv сертификат Let’s Encrypt выпускается из меню (Configure certificates) через certbot, конфиг попадает в виртуалхост автоматически. Ручная настройка:
listen 443 ssl http2;— включаем HTTP/2;ssl_certificateиssl_certificate_key— пути к сертификату и ключу;- редирект с 80 на 443 и передача
X-Forwarded-Proto httpsна бэкенд — иначе Битрикс не поймёт, что соединение защищённое; - HSTS-заголовок для боевого домена.
X-Forwarded-Proto портал будет генерировать ссылки по http и словит «смешанный контент». Проверьте, что заголовок доходит до Apache/FPM.Оптимизация и типичные ошибки
После базовой связки докрутите производительность:
- включите
gzipиbrotliдля текстовых типов; - поднимите
client_max_body_sizeдо значения из php.ini (загрузка каталога и файлов); - настройте
keepaliveк бэкенду и таймаутыproxy_read_timeoutпод долгие обмены с 1С; - вынесите кеш и сессии в memcached, а не на диск.
Частые ошибки: забытый X-Forwarded-Proto, маленький client_max_body_size (обрыв импорта), кеширование персональных страниц композитом и рассинхрон таймаутов nginx/Apache, дающий 502 на длинных операциях.
Итог
Правильная связка для Битрикс — nginx на фронте (статика, SSL, композит) и Apache с mod_php или PHP-FPM на бэкенде. Именно здесь решается скорость витрины: композитный кеш, gzip/brotli, тюнинг пулов и корректные заголовки проксирования. BitrixEnv собирает эту схему из коробки, но при ручной настройке важно не забыть про X-Forwarded-Proto, лимиты тела запроса и защиту персональных страниц.
Мы в B2Bsite настраиваем веб-стек под реальный профиль нагрузки: переводим проекты на PHP-FPM, вылизываем конфиги nginx и композита, поднимаем memcached и мониторинг. Результат — стабильные ответы под пиками и предсказуемые релизы вместо разовых «магических» правок конфигов.
Частые вопросы
Зачем Битриксу и nginx, и Apache одновременно?
nginx дёшево раздаёт статику, держит SSL и медленные соединения и отдаёт композитный кеш, а Apache с mod_php выполняет PHP. Двухслойная схема экономит тяжёлые PHP-воркеры.
Что быстрее — Apache mod_php или PHP-FPM?
Под нагрузкой PHP-FPM экономнее по памяти и гибче масштабируется пулами воркеров. Apache проще, потому что штатно понимает .htaccess из дистрибутива.
Как работает композитный кеш на nginx?
nginx проверяет наличие готового HTML в /bitrix/html_pages и, если у пользователя нет служебных cookie, отдаёт его напрямую без запуска PHP.
Почему сайт генерирует http-ссылки при работающем HTTPS?
На бэкенд не доходит заголовок X-Forwarded-Proto https. Без него Битрикс считает соединение незащищённым и выдаёт смешанный контент.
Из-за чего обрывается импорт каталога?
Частая причина — маленький client_max_body_size в nginx и короткие proxy-таймауты. Их нужно согласовать со значениями php.ini и длительностью обмена.
Где лежат конфиги виртуалхостов в BitrixEnv?
Настройки сайтов находятся в /etc/nginx/bx/conf, правила Битрикс — в bitrix.conf, общий конфиг — в /etc/nginx/nginx.conf.
Как настроить пул PHP-FPM?
В /etc/php-fpm.d/www.conf задают pm = dynamic, pm.max_children по доступной памяти и pm.max_requests около 500 для защиты от утечек.
Почему возникают ошибки 502 на длинных операциях?
Обычно из-за рассинхрона таймаутов nginx и Apache/FPM. Увеличьте proxy_read_timeout и соответствующие таймауты бэкенда под долгие обмены.
Поможем с настройкой и поддержкой Для разработчиков
Поможем с настройкой, доработкой и поддержкой Для разработчиков.