Описание проблемы

На серверах, развернутых по инструкции Установка Р7-Команда за NAT и интеграция с SIP, для доступа к серверу используется проксирующий сервер NGINX, при попытке отправить файл размером более 1 МБ передача данных не происходит. Если же файл является изображением, то отправляется только его сжатая превью-версия.

Решение и подробное описание проблемы

Симптомы

При отправке фотографии из мобильного клиента пользователь-отправитель не видит никаких ошибок.

Пример:

Не загружаются файлы размером более 1 МБ в Р7-Команда (web, desktop, android, ios) — api/v2/file/undefined

 

Однако получатель или сам отправитель в другом клиенте (например, в веб-версии или desktop-приложении) не может открыть полноразмерный файл. В чате отображается только превью — сжатая версия изображения.

Пример:

Не загружаются файлы размером более 1 МБ в Р7-Команда (web, desktop, android, ios) — api/v2/file/undefined

 

При попытке открыть превью для просмотра в полном размере пользователь видит окно бесконечной загрузки.

Пример:

Не загружаются файлы размером более 1 МБ в Р7-Команда (web, desktop, android, ios) — api/v2/file/undefined

 

В консоли разработчика браузера (DevTools) отображается ошибка 404 (Not Found) при обращении к файлу.

Пример:

Не загружаются файлы размером более 1 МБ в Р7-Команда (web, desktop, android, ios) — api/v2/file/undefined

 

Failed to load resource: the server responded with a status of 404 () /api/v2/file/undefined:1

Причина

Проблема заключается в стандартных настройках NGINX. По умолчанию проксирующий сервер ограничивает максимальный размер тела запроса клиента значением в 1 МБ. В используемой конфигурации это ограничение не было изменено, из-за чего NGINX блокирует загрузку файлов, превышающих этот лимит.

В этом файле отсутствует директива, отвечающая за максимальный размер загружаемого файла.

server {
listen 80;
server_name r7team.volav.ru;
server_tokens off;

return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name r7team.volav.ru;
ssl_certificate /etc/ssl/team/rootfullchainvolav.pem;
ssl_certificate_key /etc/ssl/team/volav.key;
ssl_session_timeout 24h;
ssl_session_tickets on;
ssl_prefer_server_ciphers on;
ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;
add_header Strict-Transport-Security "max-age=31536000;";

location / {
proxy_pass https://172.16.16.13;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
real_ip_header X-Forwarded-For;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass_header P3P;
}
}

Решение

Необходимо внести изменения в конфигурационный файл проксирующего сервера NGINX (/etc/nginx/conf.d/r7team.conf в примере).

В блок server, который обрабатывает HTTPS-трафик (порт 443), добавьте директиву client_max_body_size.

Пример

client_max_body_size 0M;

Рекомендуется для прокси сервера использовать 0M так как сервисы Р7 Команды и Корпоративного сервера имеют собственные ограничения.

  • 10M — устанавливает лимит размера файла в 10 мегабайт. Вы можете указать любое необходимое значение (например, 100M для 100 МБ);

  • 0 — полностью отключает проверку размера файла.

Итоговая корректная конфигурация:

root@r7team-e:~# cat /etc/nginx/conf.d/r7team.conf
server {
        listen 80;
        server_name r7team.volav.ru;
        server_tokens off;

        return 301 https://$server_name$request_uri;
}
server {
        listen 443 ssl http2;
        server_name r7team.volav.ru;
        ssl_certificate /etc/ssl/team/rootfullchainvolav.pem;
        ssl_certificate_key /etc/ssl/team/volav.key;
        ssl_session_timeout 24h;
        ssl_session_tickets on;
        ssl_prefer_server_ciphers on;
        ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;
        add_header Strict-Transport-Security "max-age=31536000;";
        client_max_body_size 0M;
        location / {
                proxy_pass https://172.16.16.13;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header X-Forwarded-Host $host;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                real_ip_header X-Forwarded-For;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_pass_header P3P;
        }
}

После внесения изменений не забудьте перезагрузить конфигурацию NGINX командой:

sudo nginx -s reload
Была ли полезна статья?
Позвольте нам стать лучше