PUT & access_by_lua_file
itcod
nginx-forum at nginx.us
Thu Apr 16 08:27:12 UTC 2015
Здравствуйте уважаемые!
Наблюдаю странное поведение nginx.
В тестовом авторизационном файле луа сказано, что метод PUT запрещён (см
листинг ниже).
И при этом когда захожу вижу, что сначало nginx разрешает PUT и идет
передача файла на WEBDAV и только после завершения передачи файла nginx
стартует access_by_lua_file /etc/nginx/lua/auth-dav1.lua и возвращает запрет
PUT(передачи файла)... см лог ниже.
По факту получается, что я не могу запретить из луа-авторизатора передачу
файла? конечно его размещение запрещается... но при этом он качается на
сервер и излишне грузит nginx и канал!!!
Почему так? Это баг, фича, я глючу или ещё чвото?
------------------------
лог файл BitKinex (кстати FAR-NetDrive ведёт себя анналогично)
Resolving host name "dav.example.com" ...
Connecting ( dav.example.com => ip: 10.0.0.1, port: 80 )
Connected (10.0.0.1:80)
<<< PUT /IMG_20150414_184225.jpg HTTP/1.1
<<< Host: dav.example.com
<<< User-Agent: BitKinex/3.2.3
<<< Accept: */*
<<< Pragma: no-cache
<<< Cache-Control: no-cache
<<< Content-Length: 696983
<<< Content-Type: application/octet-stream
<<< Translate: f
>>> HTTP/1.1 405 Not Allowed
>>> Server: nginx/0.8.54
>>> Date: Thu, 16 Apr 2015 08:08:52 GMT
>>> Content-Type: text/html
>>> Connection: keep-alive
>>> Content-Length: 173
Connection closed
-----------------------------
Конфиг virt
dav.conf
server {
listen 80;
server_name dav.example.com;
server_name_in_redirect off;
access_log /var/log/nginx/dav-access.log main;
resolver 10.255.255.1 [::1]:5353;
set $dir /opt/home;
set $dir_path $dir;
if ($uri ~* ^(.*)([$/].*)$) {
set $dir_path $dir$1;
}
set $home $dir_path;
set $sadm_passwd .htpsw;
set $user_passwd .uhtpasswd;
location / {
access_by_lua_file /etc/nginx/lua/auth-dav1.lua;
dav_methods PUT DELETE MKCOL COPY MOVE;
dav_ext_methods PROPFIND OPTIONS;
create_full_put_path on;
dav_access user:rw group:rw;
client_body_temp_path /opt/itcod-dav.tmp/;
client_max_body_size 0;
autoindex on;
root /opt/home/;
}
location ~/\.ht {
deny all;
}
}
---------------------------------------------------
тестовый листинг луа
auth-dav1.lua
if ngx.var.request_method == 'PUT' then
ngx.exit(405)
end
PS: так же пробовал ngx.exit(403) ngx.exit(423) - результат не меняется.
сначало грузит потом запрещает.
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,258069,258069#msg-258069
Подробная информация о списке рассылки nginx-ru