Мой nginx.conf:
location ~ ^/api/(.*)$ {
alias /home/username/apidav/$remote_user/$1;
client_body_temp_path /var/www/path/;
client_max_body_size 50m;
dav_methods PUT DELETE MKCOL;# COPY MOVE;
create_full_put_path on;
dav_access user:rw group:rw all:r;
dav_ext_methods PROPFIND OPTIONS;
auth_request /api_auth;
}
location /api_auth {
internal;
proxy_pass http://www.domain.ru/accounts/api_auth/;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Original-URI $request_uri;
}
curl -T test.txt 'http: // gert: passwd@www.domain.ru/api/'curl: (56) Ошибка Recv: сброс соединения одноранговым узлом?
Зачем?
хвост -f /var/log/nginx/error.log
2012/11/16 17:53:42 [предупреждение] 30060 # 0: рабочий процесс 8374 завершился по сигналу 11
Журнал отладки хвоста после запроса авторизации:
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 отправить 100 Продолжить
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 отправка: fd: 458 25 из 25
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 http чтение тела запроса клиента
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 recv: fd: 458-1 из 91
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 recv () не готов (11: ресурс временно недоступен)
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 http client request body recv -2
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 http клиентский запрос тела отдых 91
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 добавлен таймер событий: 458: 60000: 1353027693786
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 HTTP-запрос финализации: -4, "/api/test.txt?" а: 1, в: 2
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 http-запросов: 2 blk: 0
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 событие публикации 0000000001789C58
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 событие публикации 000000000179D468
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 удалить опубликованное событие 000000000179D468
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 http пустой обработчик
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 удалить опубликованное событие 0000000001789C58
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 http lingering close handler
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 recv: fd: 461 0 из 4096
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 длительное чтение: 0
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 http-запросов: 1 blk: 0
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 HTTP-запрос закрытия
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 обработчик журнала http
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 бесплатно: 0000000000000000
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 бесплатно: 00000000016DE8A0, неиспользуемых: 1
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 бесплатно: 0000000001605050, неиспользуемых: 327
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 закрыть http-соединение: 461
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 таймер события del: 461: 1353027638785
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 многоразовое соединение: 0
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 бесплатно: 00000000016610F0
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 бесплатно: 00000000015BFAA0
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 бесплатно: 00000000015F0050, неиспользуемых: 8
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1894 бесплатно: 000000000163E980, неиспользуемых: 112
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 событие публикации 0000000001789B88
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 событие публикации 000000000179D398
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 удалить опубликованное событие 000000000179D398
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 HTTP-запрос на запуск: "/api/test.txt?"
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 фаза содержимого: 19
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 копия http-скрипта: "/ home / username / apidav /"
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 http скрипт var: "gert"
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 копия http-скрипта: "/"
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 захват сценария http: "test.txt"
2012/11/16 07:00:33 [отладка] 8241 # 0: * 1892 http put filename: "/home/username/apidav/gert/test.txt"
2012/11/16 07:00:33 [отладка] 8285 # 0: событие добавления epoll: fd: 9 op: 1 ev: 00000001
2012/11/16 07:36:55 [отладка] 8255 # 0: событие добавления epoll: fd: 9 op: 1 ev: 00000001
2012/11/16 07:36:55 [отладка] 8285 # 0: epoll del event: fd: 9 op: 2 ev: 00000000
дамп ядра
(gdb) bt
0 ngx_ext_rename_file (src = 0x8, to = 0x7fffcaa10870, ext = 0x7fffcaa10840) в src / core / ngx_file.c: 545
1 0x0000000000472864 в ngx_http_dav_put_handler (r = 0x1581fe0) в src / http / modules / ngx_http_dav_module.c: 261
2 0x0000000000450a55 в ngx_http_read_client_request_body (r = 0x1581fe0, post_handler = 0x472730) в src / http / ngx_http_request_body.c: 155
3 0x0000000000473873 в ngx_http_dav_handler (r = 0x1581fe0) в src / http / modules / ngx_http_dav_module.c: 172
4 0x0000000000443676 в ngx_http_core_content_phase (r = 0x1581fe0, ph = 0x14e7de0) в src / http / ngx_http_core_module.c: 1403
5 0x000000000043e215 в ngx_http_core_run_phases (r = 0x1581fe0) в src / http / ngx_http_core_module.c: 877
6 0x0000000000448b13 в ngx_http_request_handler (ev = 0x161e9f8) в src / http / ngx_http_request.c: 1846
7 0x000000000042e308 в ngx_event_process_posted (цикл = 0x156be60, posted = 0x71edc0) в src / event / ngx_event_posted.c: 40
8 0x0000000000434f59 в ngx_worker_process_cycle (cycle = 0x156be60, data =) в src / os / unix / ngx_process_cycle.c: 806
9 0x00000000004338b5 в ngx_spawn_process (cycle = 0x156be60, proc = 0x434ea0, data = 0x0, name = 0x4d4de8 "worker process", respawn = -4) в src / os / unix / ngx_process.c: 198
10 0x00000000004352ca в ngx_start_worker_processes (cycle = 0x156be60, n = 20, type = -4) в src / os / unix / ngx_process_cycle.c: 365
11 0x0000000000435fda в ngx_master_process_cycle (cycle = 0x156be60) в src / os / unix / ngx_process_cycle.c: 250
12 0x0000000000415efe в основном (argc =, argv =) в src / core / nginx.c: 410
Проблема, которую вы видите, представляет собой комбинацию двух актуальных проблем:
Проблема в ядре nginx, из-за которой в некоторых случаях некорректно читается тело запроса. В вашем случае эта проблема вызвана модулем запроса авторизации. Эта проблема изучается.
В ошибка в модуле dav что заставляет nginx разыменовать нулевой указатель, если тело запроса не было прочитано под управлением модуля dav. Ошибка не проявляется в нормальных условиях, но из-за вышеуказанной проблемы вы ее нашли.