Найти в Дзене
АБМ ИТ-интегратор

Настройка проксирования S3 Timeweb через Nginx для 1С-Битрикс и Битрикс24

Оглавление

Если после подключения внешнего хранилища перестали воспроизводиться или скачиваться перемещённые файлы, например, аудиозаписи разговоров в сделках Битрикс24 при включенной функции «Быстрая отдача файлов через Nginx» — необходимо настроить проксирование S3 через Nginx на стороне сервера.

Дело в том, что при включенной опции «Быстрая отдача файлов через Nginx», метод, который возвращает файл, после проверки прав выставляет заголовок X-Accel-Redirect и прекращает работу. Этот заголовок обрабатывается Nginx, который сам считывает указанный файл с диска, освобождая бекэнд. Поэтому важно настроить проксирование в Nginx между S3 и 1С-Битрикс.

Если мы посмотрим типовой конфигурационный файл nginx, который сгенерирован виртуальной машиной BitrixVM, то увидим, что для BitrixVM предусмотрены готовые конфигурации проксирования для провайдеров, которые поддерживаются платформой 1С-Битрикс «из коробки»: Amazon, Rackspace, Clodo, Google, Selectel, Yandex, HotBox.

Если вам необходимо подключить стороннего провайдера S3 через nginx к Битрикс24 или 1С-Битрикс — обратитесь к нашим специалистам в «АБМ» ИТ-интегратор!

Услуги поддержки | Контакты

Готовая конфигурация в bitrix_general.conf для проксирования через nginx

Секция в /etc/nginx/bx/conf/bitrix_general.conf с готовыми конфигурациями:

# Use nginx to return static content from s3 cloud storage
# /upload/bx_cloud_upload/<schema>.<backet_name>.<s3_point>.amazonaws.com/<path/to/file>
location ^~ /upload/bx_cloud_upload/ {
    # Amazon
    location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.(s3|af-south-1|ap-east-1|ap-south-1|ap-south-2|ap-southeast-1|ap-southeast-2|ap-southeast-3|ap-southeast-4|ap-northeast-1|ap-northeast-2|ap-northeast-3|ca-central-1|ca-west-1|cn-north-1|cn-northwest-1|eu-central-1|eu-central-2|eu-west-1|eu-west-2|eu-west-3|eu-south-1|eu-south-2|eu-north-1|il-central-1|me-south-1|me-central-1|sa-east-1|us-east-1|us-east-2|us-west-1|us-west-2|us-gov-east-1|us-gov-west-1)\.amazonaws\.com/([^\s]+)$ {
    internal;
    resolver 8.8.8.8 ipv6=off;
    proxy_method GET;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Server $host;
    #proxy_max_temp_file_size 0;
    more_clear_input_headers 'Authorization';
    proxy_set_header "cookie" "";
    proxy_set_header "content-type" "";
    proxy_set_header "content-length" "";
    proxy_pass $1://$2.$3.amazonaws.com/$4;
    }
    # Rackspace
    location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.([^/:\s]+)\.([^/:\s]+)\.rackcdn\.com/([^\s]+)$ {
    internal;
    resolver 8.8.8.8 ipv6=off;
    proxy_method GET;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Server $host;
    more_clear_input_headers 'Authorization';
    proxy_set_header "cookie" "";
    proxy_set_header "content-type" "";
    proxy_set_header "content-length" "";
    #proxy_max_temp_file_size 0;
    proxy_pass $1://$2.$3.$4.rackcdn.com/$5;
    }
    # Clodo
    location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.clodo\.ru\:(80|443)/([^\s]+)$ {
        internal;
        resolver 8.8.8.8 ipv6=off;
        proxy_method GET;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Server $host;
        more_clear_input_headers 'Authorization';
        proxy_set_header "cookie" "";
        proxy_set_header "content-type" "";
        proxy_set_header "content-length" "";
        #proxy_max_temp_file_size 0;
        proxy_pass $1://$2.clodo.ru:$3/$4;
    }
    # Google
    location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.commondatastorage\.googleapis\.com/([^\s]+)$ {
        internal;
        resolver 8.8.8.8 ipv6=off;
        proxy_method GET;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Server $host;
        more_clear_input_headers 'Authorization';
        proxy_set_header "cookie" "";
        proxy_set_header "content-type" "";
        proxy_set_header "content-length" "";
        #proxy_max_temp_file_size 0;
        proxy_pass $1://$2.commondatastorage.googleapis.com/$3;
    }
    # Selectel
    location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.selcdn\.ru/([^\s]+)$ {
        internal;
        resolver 8.8.8.8 ipv6=off;
        proxy_method GET;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Server $host;
        more_clear_input_headers 'Authorization';
        proxy_set_header "cookie" "";
        proxy_set_header "content-type" "";
        proxy_set_header "content-length" "";
        #proxy_max_temp_file_size 0;
        proxy_pass $1://$2.selcdn.ru/$3;
    }
    # Selectel as S3 compatible storage
    location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.selstorage\.ru/([^\s]+)$ {
    internal;
    resolver 8.8.8.8 ipv6=off;
    proxy_method GET;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Server $host;
    more_clear_input_headers 'Authorization';
    proxy_set_header "cookie" "";
    proxy_set_header "content-type" "";
    proxy_set_header "content-length" "";
    #proxy_max_temp_file_size 0;
    proxy_pass $1://$2.selstorage.ru/$3;
    }
    # Yandex
    location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.storage\.yandexcloud\.net/([^\s]+)$ {
        internal;
        resolver 8.8.8.8 ipv6=off;
        proxy_method GET;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Server $host;
        more_clear_input_headers 'Authorization';
        proxy_set_header "cookie" "";
        proxy_set_header "content-type" "";
        proxy_set_header "content-length" "";
        #proxy_max_temp_file_size 0;
        proxy_pass $1://$2.storage.yandexcloud.net/$3;
    }
    # Yandex second option
    location ~ ^/upload/bx_cloud_upload/(http[s]?)\.storage\.yandexcloud\.net/([^\s].+)$ {
        internal;
        resolver 8.8.8.8 ipv6=off;
        proxy_method GET;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Server $host;
        more_clear_input_headers 'Authorization';
        #proxy_max_temp_file_size 0;
        proxy_set_header "cookie" "";
        proxy_set_header "content-type" "";
        proxy_set_header "content-length" "";
        proxy_pass $1://storage.yandexcloud.net/$2;
    }
    # HotBox
    location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.hb\.bizmrg\.com/([^\s]+)$ {
        internal;
        resolver 8.8.8.8 ipv6=off;
        proxy_method GET;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Server $host;
        more_clear_input_headers 'Authorization';
        #proxy_max_temp_file_size 0;
        proxy_set_header "cookie" "";
        proxy_set_header "content-type" "";
        proxy_set_header "content-length" "";
        proxy_pass $1://$2.hb.bizmrg.com/$3;
    }
    # HotBox
    location ~ ^/upload/bx_cloud_upload/(http[s]?)\.hb\.bizmrg\.com/([^\s].+)$ {
        internal;
        resolver 8.8.8.8 ipv6=off;
        proxy_method GET;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Server $host;
        more_clear_input_headers 'Authorization';
        #proxy_max_temp_file_size 0;
        proxy_set_header "cookie" "";
        proxy_set_header "content-type" "";
        proxy_set_header "content-length" "";
        proxy_pass $1://hb.bizmrg.com/$2;
    }
    # Clodo.ru
    location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.clodo\.ru/([^\s]+)$ {
        internal;
        resolver 8.8.8.8 ipv6=off;
        proxy_method GET;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Server $host;
        more_clear_input_headers 'Authorization';
        #proxy_max_temp_file_size 0;
        proxy_set_header "cookie" "";
        proxy_set_header "content-type" "";
        proxy_set_header "content-length" "";
        proxy_pass $1://$2.clodo.ru/$3;
    }
    location ~* .*$ {
    deny all;
    }
}

Конфигурация nginx для проксирования облачных хранилищ S3 Timeweb

А что делать, если нет готовой конфигурации nginx на сервере для нужного вам провайдера облачных хранилищ S3, например для Timeweb? В этом случае необходимо добавить конфигурацию самостоятельно.

Для этого в конфигурационном файле nginx: /etc/nginx/bx/conf/bitrix_general.conf после строк:

# Use nginx to return static content from s3 cloud storage
# /upload/bx_cloud_upload/<schema>.<backet_name>.<s3_point>.amazonaws.com/<path/to/file>
location ^~ /upload/bx_cloud_upload/ {

Добавьте секцию с проксированием для S3 Timeweb:

# Timeweb.ru
    location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.timeweb\.cloud/([^\s]+)$ {
        internal;
    resolver 8.8.8.8 ipv6=off;
    proxy_method GET;
        proxy_set_header Host s3.timeweb.cloud;
        proxy_ssl_server_name on;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Authorization "";
        proxy_hide_header x-amz-id-2;
        proxy_hide_header x-amz-request-id;
        proxy_hide_header Set-Cookie;
        add_header Cache-Control "public, max-age=3600";
        expires 1h;
        proxy_pass $1://$2.timeweb.cloud/$3;
    }

Проверяем, чтобы в nginx не было ошибок:

nginx -t

Должны получить ответ:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если ошибки есть — проверяем и исправляем их, если ошибок нет — перезагружаем nginx:

systemctl restart nginx

Далее включите функцию «Быстрая отдача файлов через Nginx» в настройках Главного модуля 1С-Битрикс.

После делается проверка корректной работы S3 через nginx, для этого можно открыть в Битрикс24 сделку и запустить проигрывание записи разговора IP-телефонии — должно работать воспроизведение и скачивание.

Конфигурация nginx CentOS 9 и BitrixVM 9 для проксирования облачных хранилищ S3 Timeweb

После установки очередных обновлений пакетов сервера в конфигурационном файле nginx: /etc/nginx/bx/conf/bitrix_general.conf на CentOS 9 и BitrixVM 9 появились штатные секции Timeweb подключения облачных хранилищ.

# Timeweb.cloud
    location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.timeweb\.cloud/([^\s]+)$ {
        internal;
        resolver 8.8.8.8 ipv6=off;
        proxy_method GET;
        proxy_set_header Host s3.timeweb.cloud;
        proxy_ssl_server_name on;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Authorization "";
        proxy_hide_header x-amz-id-2;
        proxy_hide_header x-amz-request-id;
        proxy_hide_header Set-Cookie;
        add_header Cache-Control "public, max-age=3600";
        expires 1h;
        proxy_pass $1://$2.timeweb.cloud/$3;
    }
    # Timeweb.cloud S3 compatible storage
    location ~ ^/upload/bx_cloud_upload/(http[s]?)\.s3\.timeweb\.cloud/([^\s].+)$ {
        internal;
        resolver 8.8.8.8 ipv6=off;
        proxy_method GET;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Server $host;
        more_clear_input_headers 'Authorization';
        #proxy_max_temp_file_size 0;
        proxy_set_header "cookie" "";
        proxy_set_header "content-type" "";
        proxy_set_header "content-length" "";
        proxy_pass $1://s3.timeweb.cloud/$2;
    }

Проверяем, чтобы в nginx не было ошибок:

nginx -t

Должны получить ответ:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если ошибки есть — проверяем и исправляем их, если ошибок нет — перезагружаем nginx:

systemctl restart nginx

Далее включите функцию «Быстрая отдача файлов через Nginx» в настройках Главного модуля 1С-Битрикс и проверьте корректно ли воспроизводятся и скачиваются файлы, которые перемещаются во внешнее хранилище S3.

Заказать поддержку сайта и корпоративного портала

В компании «АБМ» ИТ-интегратор имеется большой опыт организации облачной инфраструктуры для учётной системы 1С, сайтов и интернет-магазинов, b2b-порталов и корпоративных порталов с CRM на платформе 1С-Битрикс: Управление сайтом или 1С-Битрикс24: Корпоративный портал. Если у вас есть потребность — обратитесь к нашим специалистам!

Услуги поддержки | Контакты