Содержание
Описание проблемы
На серверах, развернутых по инструкции Установка Р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