Welcome! Log In Create A New Profile

Advanced

Конфликт mirror и dav модулей

February 03, 2018 10:48PM
Здравствуйте, обнаружил конфликт в работе модулей Dav и Mirror.

Пример конфигурации, при которой Dav модуль всегда будет возвращать HTTP 500, причем без записи в лог:

location / {
root /somedir;
aio threads;

client_max_body_size 30m;
dav_access user:rw group:rw all:rw;
dav_methods PUT;
create_full_put_path on;
client_body_temp_path /somedir/temp 1 2;
mirror /mirror/127.0.0.2:80;
}

location ~* /mirror/(?<backend>.*) {
internal;
client_max_body_size 0;
proxy_pass http://$backend/$request_uri;
proxy_ignore_client_abort on;
proxy_buffering off;
proxy_method PUT;
proxy_request_buffering off;
proxy_connect_timeout 5s;
}


Так происходит из-за того, что модуль ngx_http_dav_module, который работает в фазе NGX_HTTP_CONTENT_PHASE требует, чтобы тело запроса было сохранено во временный файл

r->request_body_in_file_only = 1;
r->request_body_in_persistent_file = 1;
r->request_body_in_clean_file = 1;
r->request_body_file_group_access = 1;
r->request_body_file_log_level = 0;

rc = ngx_http_read_client_request_body(r, ngx_http_dav_put_handler);

Однако модуль ngx_http_mirror_module, который работает в фазе NGX_HTTP_PRECONTENT_PHASE так же считывает содержимое тела запроса, но делает это раньше и с параметрами по умолчанию

Default: client_body_in_file_only off;

В итоге мы пытаемся повторно считать тело запроса, но метод ngx_http_read_client_request_body возвращает уже считанную информацию и проверка в методе ngx_http_dav_put_handler не проходит.

static void
ngx_http_dav_put_handler(ngx_http_request_t *r)
{

/****** some code here ******/

if (r->request_body == NULL || r->request_body->temp_file == NULL) {
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
return;
}


По идее, чтобы сохранить независимость модулей нужно реализовывать сброс считанного буфера в файл, но лично я решил проблему просто добавив директиву

client_body_in_file_only clean;


Если я прав, добавьте, пожалуйста, эту информацию в документацию.
Subject Author Posted

Конфликт mirror и dav модулей

Artem Smorodin February 03, 2018 10:48PM

Re: Конфликт mirror и dav модулей

Roman Arutyunyan February 07, 2018 10:20AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 324
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready