Я хотел понять, возможен ли что-то вроде следующего сценария:
Nginx обрабатывает запрос и направляет его в какое-то приложение аутентификации, где файлы cookie и / или другие идентификаторы безопасности интерпретируются и проверяются. Приложение, возможно, вносит некоторые дополнения в запрос (добавляя аутентифицированные заголовки). При неудачной аутентификации возвращается HTTP 401.
Затем Nginx принимает запрос и направляет его через приложение авторизации, которое определяет на основе идентификатора и HTTP-глагола (поместить, удалить, получить и т. Д.) И соответствующего URL-адреса, имеет ли субъект / агент / пользователь разрешение на выполнение предполагаемого действие. Возможно, приложение авторизации несколько изменяет запрос, например, добавляя другой заголовок. Ошибка авторизации возвращает 403.
(Вымойте, ополосните, повторите шаблон прокси для любого количества служб, которые хотят каким-либо образом участвовать в запросе.)
Наконец, Nginx направляет запрос в фактический код приложения, где запрос проверяется, а запрошенные операции выполняются в соответствии с рассматриваемым URL-адресом, и где личность пользователя может быть захвачена и понята приложением, просмотрев измененный HTTP-запрос. .
В идеале Nginx мог бы сделать это изначально или с помощью плагина. Любые идеи?
Альтернатива, которую я рассмотрел, заключается в том, что Nginx передает первоначальный запрос приложению аутентификации, а затем это приложение передает запрос обратно в Nginx (будь то в том же или другом блоке).
Я знаю, что существует ряд фреймворков приложений (Django, RoR и т. Д.), Которые могут делать многое из этого «в процессе», но я пытался сделать вещи более общими и автономными, чтобы разные приложения могли «зацепить» "HTTP-конвейер Nginx, а затем участвуют в коротком замыкании и даже изменяют запрос соответствующим образом.
Если Nginx не может этого сделать, знает ли кто-нибудь о других веб-серверах, которые будут работать так, как описано выше?
После большого количества копаний, Nginx определенно поддерживает возможность расширения, чтобы включить описанный выше сценарий, но нет ничего, что можно было бы использовать явно "из коробки".
Одним из наиболее многообещающих плагинов, которые могут реализовать этот сценарий практически без кода, будет модуль Lua для включения подзапроса HTTP в конвейере обработки запросов: http://wiki.nginx.org/HttpLuaModule
Другой - в кастомном модуле, написанном русскими ребятами из OpenStats.com. Этот модуль, возможно, придется немного настроить с помощью небольшого кода C: http://mdounin.ru/hg/ngx_http_auth_request_module/file/a29d74804ff1/README
И наконец, возможность написать собственный модуль, не основанный на вышеупомянутых модулях, но при этом напрямую подключаться к подзапросам: http://www.evanmiller.org/nginx-modules-guide.html