Содержание

Настройка 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:

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. Настройка в административном разделе Битрикс

Зайдите в: Настройки → Настройки продукта → Настройки модулей → Главный модуль

Важные настройки:

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>

  1. Откройте https://your-domain.com
  2. Кликните по внутренним ссылкам: CRM, Задачи, Календарь
  3. Кликните на название портала в левом верхнем углу
  4. 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. Итоговая проверка

После выполнения всех настроек проверьте:

<note tip> Рекомендация: Сохраните копии измененных конфигурационных файлов перед обновлением Bitrix VA, так как обновления могут сбросить настройки. </note>