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