Блокировка при загрузке файлов больше 2Мб

DKlin

Member
Тестируем работу nemesida free. Разместили облачное хранилище за waf с реверс прокси. Блокировки, которые высветились в личном кабинете внесли в исключения. Но есть проблема с загрузкой файлов большого размера, т.е. файлы около 1 Мб загружаются корректно, файлы от 2 Мб и больше не загружаются.
При этом с реверс прокси проблем нет, если отключить модуль waf, то все работает. При включенном модуле waf запрос даже не отображается в логах nginx. В личном кабинете waf нет никаких сообщений, при этом сервер подвисает, личный кабинет тоже становится недоступен и требуется restart nginx.
Видел похожую тему здесь, но не совсем понял куда надо добавить исключения, ссылки в теме кидают на общую страницу документации и там параметра exclude я не нашел. Указанный в той теме параметр nwaf_body_exclude добавлял в nwaf.conf, не помогло.
Настройки waf сделаны по документации. Хранилище nextcloud, загрузка файлов идет методом PUT.
 

DKlin

Member
Проблема решилась после указания в nwaf.conf
nwaf_body_exclude *;
nwaf_put_body_exclude *;
Если место звездочки ставлю домен, то не работает.
 

support

Well-known member
Staff member
Добрый день.
Уточните, пожалуйста, какие параметры и значения применяли?
 

DKlin

Member
с указанием домена:
nwaf_body_exclude mydomain.com;
nwaf_put_body_exclude mydomain.com;
не работает, файлы не загружаются.
Подскажите еще, работает ли с такими настройками ClamAV?
 
Last edited:

support

Well-known member
Staff member
Пришлите, пожалуйста, лог Nginx на момент загрузки файлов.
При исключении из обработки тела запроса проверка с помощью ClamAV также проводиться не будет.
 

DKlin

Member
с указанием домена:
nwaf_body_exclude mydomain.com;
nwaf_put_body_exclude *;

В личном кабинете показывает ошибку:
Description
Body is too large (104857600 bytes) for processing, increase "client_body_buffer_size" parameter
Method

PUT
Body
Body is too large (104857600 bytes)
URL
/remote.php/dav/uploads/B59224E0-26C6-49D6-8A73-E82DF80E7F74/web-file-upload-5cd851e0d748d18ae2157c14d4e4c09c-1667478057577/0
 

support

Well-known member
Staff member
Добрый день.
Какие значения параметров client_max_body_size и client_body_buffer_size установлены в настройках Nginx?
 

DKlin

Member
Секция настроек для сервиса с загрузкой файлов.
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name mydomain.com;
server_tokens off;
ssl_certificate /etc/ssl/certs/my.crt;
ssl_certificate_key /etc/ssl/private/my.key;
include snippets/ssl-params.conf;
client_max_body_size 2000M;
client_body_buffer_size 25M;
client_body_timeout 300s;

access_log /var/log/nginx/cloud_access.log compression;
error_log /var/log/nginx/cloud_error.log;

location / {
add_header Front-End-Https on;
proxy_hide_header X-Powered-By;
proxy_read_timeout 90;
proxy_pass https://mydomain.com;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $http_host;
proxy_request_buffering off;
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;
}
}
 

support

Well-known member
Staff member
Секция настроек для сервиса с загрузкой файлов.
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name mydomain.com;
server_tokens off;
ssl_certificate /etc/ssl/certs/my.crt;
ssl_certificate_key /etc/ssl/private/my.key;
include snippets/ssl-params.conf;
client_max_body_size 2000M;
client_body_buffer_size 25M;
client_body_timeout 300s;

access_log /var/log/nginx/cloud_access.log compression;
error_log /var/log/nginx/cloud_error.log;

location / {
add_header Front-End-Https on;
proxy_hide_header X-Powered-By;
proxy_read_timeout 90;
proxy_pass https://mydomain.com;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $http_host;
proxy_request_buffering off;
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;
}
}
Вы пытаетесь загрузить файл более 100Мб (104857600 bytes) при допустимом значении client_body_buffer_size 25Мб. Необходимо увеличить значение параметра.
 

DKlin

Member
Это я и так понимаю. К каким последствиям приведет увеличение буфера до 2 Гб например?
Вопрос больше в том, почему не работает исключение
nwaf_body_exclude mydomain.com;
nwaf_put_body_exclude *;
Если в обоих стоят звездочки, то все работает корректно. Но я хотел бы исключить из проверки тело только для одного ресурса.
 

support

Well-known member
Staff member
Это я и так понимаю. К каким последствиям приведет увеличение буфера до 2 Гб например?
Вопрос больше в том, почему не работает исключение
nwaf_body_exclude mydomain.com;
nwaf_put_body_exclude *;
Если в обоих стоят звездочки, то все работает корректно. Но я хотел бы исключить из проверки тело только для одного ресурса
Параметр nwaf_body_exclude предполагает использование домена и URL-адреса в качестве аргумента, например, example.com/uploads
 

support

Well-known member
Staff member
Это я и так понимаю. К каким последствиям приведет увеличение буфера до 2 Гб например?
Вопрос больше в том, почему не работает исключение
nwaf_body_exclude mydomain.com;
nwaf_put_body_exclude *;
Если в обоих стоят звездочки, то все работает корректно. Но я хотел бы исключить из проверки тело только для одного ресурса.
Параметр nwaf_body_exclude принимает значения в формате vhost/path или *. Более подробно формат записи для данного параметра можно узнать в соответствующемразделе руководства https://nemesida-waf.ru/free/2511
 

DKlin

Member
Работает если так:
nwaf_body_exclude *;
nwaf_put_body_exclude mydomain.com;

А если так:
nwaf_body_exclude mydomain.com/remote.php;
nwaf_put_body_exclude mydomain.com;
то опять ошибка:
Description
Body is too large (56237870 bytes) for processing, increase "client_body_buffer_size" parameter
Method
PUT
Body
Body is too large (56237870 bytes)
URL
/remote.php/webdav/some.file

Если я правильно понял, то надо вычислить все возможные варианты пути до имени загружаемого файла и внести их в список или есть более изящное решение, что-нибудь типа nwaf_body_exclude mydomain.com/remote.php*;?
 
Last edited:

support

Well-known member
Staff member
Если я правильно понял, то надо вычислить все возможные варианты пути до имени загружаемого файла и внести их в список или есть более изящное решение, что-нибудь типа nwaf_body_exclude mydomain.com/remote.php*;?
Да, Вы правильно поняли.
В настоящий момент другого решения нет.
 
Top