Как добавить $ request_uri в модуль auth_request? - PullRequest
1 голос
/ 23 июня 2019

Вот мой конфигурационный файл nginx:

location ~* ^/admin-panel/rest/(.*) {
    auth_request        /admin/admin_authentication/check_access?url=$request_uri;

    proxy_set_header    Host        $host;
    proxy_set_header    X-Real-IP   $remote_addr;

    resolver 127.0.0.11 ipv6=off;

    proxy_pass        http://nginx:8000/$1$is_args$args;
}

Я хочу отправить $request_uri в качестве параметра GET в службу аутентификации. но я получаю такие ошибки:

2019/06/23 06:30:07 [error] 6#6: *5 auth request unexpected status: 
404 while sending to client, client: 192.168.224.1, server: , request: 
"POST /admin-panel/rest/update HTTP/1.1", host: "localhost"
2019/06/23 06:30:07 [error] 6#6: *8 auth request unexpected status: 
404 while sending to client, client: 192.168.224.1, server: , request: 
"POST /admin-panel/rest/update HTTP/1.1", host: "localhost"
2019/06/23 06:31:56 [error] 6#6: *1 auth request unexpected status: 
404 while sending to client, client: 192.168.224.1, server: , request: 
"POST /admin-panel/rest/update HTTP/1.1", host: "localhost"
2019/06/23 06:31:57 [error] 6#6: *3 auth request unexpected status: 
404 while sending to client, client: 192.168.224.1, server: , request: 
"POST /admin-panel/rest/update HTTP/1.1", host: "localhost"

когда я удаляю ?url=$request_uri секцию в auth_request, все отлично работает

1 Ответ

2 голосов
/ 14 июля 2019

Используя lua-nginx-module (или openresty docker image), вы можете использовать access_by_lua_block вместо auth_request, например:

location ~* ^/admin-panel/rest/(.*) {
    access_by_lua_block {
        local res = ngx.location.capture("/admin/admin_authentication/check_access?url=" .. ngx.var.request_uri)

        if res.status == ngx.HTTP_OK then
            return
        end

        if res.status == ngx.HTTP_FORBIDDEN then
            ngx.exit(res.status)
        end

        ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)
    }

    proxy_set_header    Host        $host;
    proxy_set_header    X-Real-IP   $remote_addr;

    resolver 127.0.0.11 ipv6=off;

    proxy_pass        http://nginx:8000/$1$is_args$args;
}

На самом деле, этот код реализует auth_request с access_by_lua_block и создает URL с оператором конкатенации Lua ...

...