====== Настройка Bitrix Virtual Appliance для работы с внешним обратным прокси ====== Данная инструкция основана на практическом опыте настройки Bitrix Virtual Appliance версии 9.0.6 для работы с внешним nginx proxy manager. Описаны все частые ошибки и способы их решения. ===== Архитектура и особенности ===== 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 Редактирование основной конфигурации ==== В Bitrix VA часто отсутствует nano, используйте vi для редактирования файлов. Откройте конфигурацию Apache: vi /etc/httpd/bx/conf/default.conf Найдите секцию '''' и добавьте после ''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 конфигураций ===== Это самый важный шаг! Без этого исправления порты будут продолжать появляться в URL. ==== 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 Проверка в браузере ==== **Основной тест работоспособности:** - Откройте ''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-уведомления работают (если используются) **Рекомендация:** Сохраните копии измененных конфигурационных файлов перед обновлением Bitrix VA, так как обновления могут сбросить настройки.