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