Содержание
Описание проблемы
На серверах, развернутых по инструкции Установка Р7-Команда за NAT и интеграция с SIP, для доступа к серверу используется проксирующий сервер NGINX, при попытке отправить файл размером более 1 МБ передача данных не происходит. Если же файл является изображением, то отправляется только его сжатая превью-версия.
Решение и подробное описание проблемы
Симптомы
При отправке фотографии из мобильного клиента пользователь-отправитель не видит никаких ошибок.
Пример:
Однако получатель или сам отправитель в другом клиенте (например, в веб-версии или desktop-приложении) не может открыть полноразмерный файл. В чате отображается только превью — сжатая версия изображения.
Пример:
При попытке открыть превью для просмотра в полном размере пользователь видит окно бесконечной загрузки.
Пример:
В консоли разработчика браузера (DevTools) отображается ошибка 404 (Not Found) при обращении к файлу.
Пример:
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




