Настройка Bitrix Virtual Appliance для работы с внешним обратным прокси
<note important> Данная инструкция основана на практическом опыте настройки Bitrix Virtual Appliance версии 9.0.6 для работы с внешним nginx proxy manager. Описаны все частые ошибки и способы их решения. </note>
Архитектура и особенности
Bitrix Virtual Appliance использует следующую архитектуру:
Внешний nginx (proxy manager) → nginx (Bitrix VA:80/443) → httpd (Apache:8888)
Ключевая проблема: По умолчанию внутренний nginx VA передает порты в заголовке Host, что приводит к появлению портов в URL внутренних ссылок Битрикс (например: https://domain.com:80/crm/).
Предварительная диагностика
Проверьте текущую конфигурацию системы:
# Проверка запущенных веб-серверов ps aux | grep -E "(httpd|nginx|apache)" # Проверка структуры конфигураций httpd -S find /etc/nginx/bx -name "*.conf" | head -10 # Проверка модулей Apache httpd -M | grep remoteip
1. Настройка Apache (httpd)
1.1 Редактирование основной конфигурации
<note tip> В Bitrix VA часто отсутствует nano, используйте vi для редактирования файлов. </note>
Откройте конфигурацию Apache:
vi /etc/httpd/bx/conf/default.conf
Найдите секцию <VirtualHost 127.0.0.1:8888> и добавьте после DocumentRoot следующие настройки:
# Настройки для работы с внешним обратным прокси RemoteIPHeader X-Forwarded-For RemoteIPTrustedProxy 127.0.0.1 RemoteIPTrustedProxy 192.168.0.0/24 # Обработка HTTPS от внешнего прокси SetEnvIf X-Forwarded-Proto "https" HTTPS=on SetEnvIf X-Forwarded-Proto "https" SERVER_PORT=443 SetEnvIf X-Forwarded-Proto "http" SERVER_PORT=80 SetEnvIf X-Forwarded-Host "(.+)" HTTP_HOST=$1
1.2 Проверка модуля RemoteIP
# Проверка загрузки модуля (игнорируйте предупреждение о FQDN) httpd -M | grep remoteip # Если модуль не загружен, добавьте в основную конфигурацию echo "LoadModule remoteip_module modules/mod_remoteip.so" >> /etc/httpd/conf/httpd.conf
2. Критическое исправление nginx конфигураций
<note warning> Это самый важный шаг! Без этого исправления порты будут продолжать появляться в URL. </note>
2.1 Поиск и исправление проблемных настроек
Проверьте текущие настройки:
grep -n "proxy_set_header Host" /etc/nginx/bx/site_avaliable/s1.conf grep -n "proxy_set_header Host" /etc/nginx/bx/site_avaliable/ssl.s1.conf
Если вы видите строки вида proxy_set_header Host $host:80; или proxy_set_header Host $host:443;, исправьте их:
# Автоматическое исправление HTTP конфигурации sed -i 's/proxy_set_header Host \$host:80;/proxy_set_header Host $host;/' /etc/nginx/bx/site_avaliable/s1.conf # Автоматическое исправление HTTPS конфигурации sed -i 's/proxy_set_header Host \$host:443;/proxy_set_header Host $host;/' /etc/nginx/bx/site_avaliable/ssl.s1.conf
2.2 Добавление правильных заголовков прокси
Убедитесь, что в обеих конфигурациях есть правильные заголовки:
Для s1.conf (HTTP):
vi /etc/nginx/bx/site_avaliable/s1.conf
Для ssl.s1.conf (HTTPS):
vi /etc/nginx/bx/site_avaliable/ssl.s1.conf
В обеих конфигурациях секция заголовков должна выглядеть так:
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; proxy_set_header X-Forwarded-Host $host; proxy_set_header Host $host; # БЕЗ портов! proxy_set_header HTTPS YES; # Только для SSL конфигурации
2.3 Проверка исправлений
# Должно показать строки БЕЗ портов grep "proxy_set_header Host" /etc/nginx/bx/site_avaliable/s1.conf grep "proxy_set_header Host" /etc/nginx/bx/site_avaliable/ssl.s1.conf # Проверка синтаксиса nginx nginx -t
3. Настройка PHP для работы с прокси
3.1 Поиск файла dbconn.php
# Поиск файла (может быть в разных местах в зависимости от версии) find / -name "dbconn.php" 2>/dev/null
Обычно файл находится в /home/bitrix/www/bitrix/php_interface/dbconn.php.
3.2 Добавление настроек прокси
Способ 1 - Через команду (рекомендуется):
# Создайте резервную копию cp /home/bitrix/www/bitrix/php_interface/dbconn.php /home/bitrix/www/bitrix/php_interface/dbconn.php.bak # Добавьте настройки в конец файла cat >> /home/bitrix/www/bitrix/php_interface/dbconn.php << 'EOF' // Настройки для работы с внешним обратным прокси if (!empty($_SERVER['HTTP_X_FORWARDED_PROTO'])) { if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') { $_SERVER['HTTPS'] = 'on'; $_SERVER['SERVER_PORT'] = 443; } else { unset($_SERVER['HTTPS']); $_SERVER['SERVER_PORT'] = 80; } } if (!empty($_SERVER['HTTP_X_FORWARDED_HOST'])) { $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST']; } EOF
Способ 2 - Через vi (если нужно отредактировать вручную):
vi /home/bitrix/www/bitrix/php_interface/dbconn.php
3.3 Проверка добавленных настроек
tail -15 /home/bitrix/www/bitrix/php_interface/dbconn.php
4. Настройка внешнего nginx proxy manager
4.1 Основные настройки
Proxy Host Settings:
- Domain Names:
your-domain.com - Scheme:
http - Forward Hostname/IP:
IP-адрес-Bitrix-VA(например:192.168.0.136) - Forward Port:
80(НЕ 8888!) - Cache Assets: ON
- Block Common Exploits: ON
4.2 Расширенные настройки
Advanced Tab:
# Заголовки для правильной работы с Битрикс 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; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; # Увеличенные лимиты для Битрикс client_max_body_size 1024M; proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600; # Оптимизация для статических файлов Битрикс location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ { expires 30d; add_header Cache-Control "public, immutable"; } # Обработка административных разделов location ~* ^/(bitrix/admin|bitrix/php_interface)/ { proxy_buffering off; proxy_request_buffering off; }
5. Применение изменений
5.1 Перезапуск сервисов
# Перезапуск в правильном порядке systemctl restart httpd systemctl restart nginx # Проверка статуса systemctl status httpd nginx
5.2 Очистка кэшей
# Очистка кэша Битрикс rm -rf /home/bitrix/www/bitrix/cache/* rm -rf /home/bitrix/www/bitrix/managed_cache/* rm -rf /home/bitrix/www/bitrix/stack_cache/* # Очистка кэша браузера (выполните в браузере) # Ctrl+Shift+R или Ctrl+F5
6. Настройка в административном разделе Битрикс
Зайдите в: Настройки → Настройки продукта → Настройки модулей → Главный модуль
Важные настройки:
- Адрес сайта:
domain.com(БЕЗ протокола http: или https:) - Использовать HTTPS: Да (если используете SSL сертификат)
7. Диагностика и проверка
7.1 Проверка заголовков через curl
# Проверка прямого подключения к Bitrix VA curl -I http://IP-Bitrix-VA # Проверка через внешний прокси curl -I https://your-domain.com # Проверка редиректов внутренних разделов curl -I http://IP-Bitrix-VA/crm/ curl -I http://IP-Bitrix-VA/tasks/
7.2 Проверка в браузере
<note> Основной тест работоспособности: </note>
- Откройте
https://your-domain.com - Кликните по внутренним ссылкам: CRM, Задачи, Календарь
- Кликните на название портала в левом верхнем углу
- URL НЕ должны содержать портов (например:
:80или:443)
Правильно: https://domain.com/crm/deal/
Неправильно: https://domain.com:80/crm/deal/
7.3 Просмотр логов при проблемах
# Логи nginx tail -f /var/log/nginx/error.log # Логи Apache tail -f /etc/httpd/logs/error_log # Проверка в режиме реального времени tail -f /var/log/nginx/error.log /etc/httpd/logs/error_log
8. Частые ошибки и их решения
Порты все еще появляются в URL
Причина: Не исправлены настройки nginx VA Решение:
# Принудительная проверка и исправление grep "proxy_set_header Host.*:80" /etc/nginx/bx/site_avaliable/s1.conf grep "proxy_set_header Host.*:443" /etc/nginx/bx/site_avaliable/ssl.s1.conf # Если найдены строки с портами, исправьте их повторно sed -i 's/proxy_set_header Host \$host:[0-9]*;/proxy_set_header Host $host;/' /etc/nginx/bx/site_avaliable/s1.conf sed -i 's/proxy_set_header Host \$host:[0-9]*;/proxy_set_header Host $host;/' /etc/nginx/bx/site_avaliable/ssl.s1.conf systemctl restart nginx
Редиректы на HTTP вместо HTTPS
Причина: Неправильно переданы заголовки прокси
Решение: Проверьте настройки в nginx proxy manager и убедитесь, что передается X-Forwarded-Proto: https
Проблемы с загрузкой файлов
Причина: Недостаточные лимиты
Решение: Увеличьте лимиты в nginx proxy manager (client_max_body_size)
Ошибки 502/504
Причина: Недостаточные таймауты Решение: Увеличьте таймауты в Advanced настройках nginx proxy manager
9. Итоговая проверка
После выполнения всех настроек проверьте:
- ✓ Сайт открывается через внешний домен
- ✓ Внутренние ссылки работают без портов в URL
- ✓ HTTPS корректно определяется
- ✓ Загрузка файлов функционирует
- ✓ Административный раздел доступен
- ✓ Push-уведомления работают (если используются)
<note tip> Рекомендация: Сохраните копии измененных конфигурационных файлов перед обновлением Bitrix VA, так как обновления могут сбросить настройки. </note>