auth_request + multipart/form-data

Maxim Dounin mdounin на mdounin.ru
Пн Янв 30 01:13:04 UTC 2017


Hello!

On Sat, Jan 28, 2017 at 04:02:18AM -0500,  Дмитрий Герасимов wrote:

> Всем доброго дня. Было задумка добавить авторизацию на все *.php файлы в
> админской части сайта. Старый конфиг
> 
> location = /admin/auth {
>     
> 	userid off;
> 	include /etc/nginx/fastcgi.conf;
> 	
>         fastcgi_pass php-fpm;
> 	fastcgi_pass_request_body off;
>         fastcgi_pass SCRIPT_FILENAME ******.php;
> }
> 
> 
> location /admin/ {
> 
>     ..........
> 
>      location ~ \.php$ {
> 
>          try_files $uri =404;
> 
>          auth_request /admin/auth;
> 	 auth_request_set $saved_set_cookie $upstream_http_set_cookie; 
> 
>         .........
>     }
> }
> 
> Это работает, но как только пытаешься отправить форму с загружеными файлами
> (файлов может и не быть, главное чтобы у формы стоял атрибут
> entype="multipart/form-data") - стабильно 405. И проблема именно а
> авторизации.

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

Лечить можно на стороне скрипта - обучить его, что тело читать не 
надо.  Или на стороне nginx'а - убедить скрипт, что тела нет.  Для 
последнего должно хватить простого

    fastcgi_param HTTP_CONTENT_LENGTH "";

Впрочем, откуда берётся код 405 мне совершенно непонятно, 
auth_request умеет возвращать только 401, 403 и 500.  Разве что в 
конфиге ещё чего-нибудь накручено, что приводит к попытке 
перенаправить POST-запрос в статический файл.

-- 
Maxim Dounin
http://nginx.org/


Подробная информация о списке рассылки nginx-ru