NGINX не отправляет заголовки или переменные в js_content внутри auth_request

Недавно у меня были проблемы с NGINX. Мне нужно создать обратный прокси-сервер NGINX, который берет некоторую информацию из определенных переменных NGINX и отправляет ее на сервер авторизации. Однако перед отправкой на указанный AuthServer его необходимо проанализировать в теле запроса HTTP POST.

Чтобы сделать этот последний шаг, я решил написать функцию NJS, которая берет эту информацию и отправляет ее на сервер авторизации через подзапрос.

Однако есть небольшая проблема: поскольку функция NJS вызывается внутри локации, она, по-видимому, не имеет доступа к переменным NGINX.

Итак, я попытался отправить значение переменных в функцию NJS через некоторые заголовки костюмов, добавленные конфигурацией (оба внутри месте и за его пределами). К сожалению, это не решило проблему.

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

      location /operation/ {
    auth_request /authz; 
    auth_request_set $example_variable "Plz work variable";
    add_header X-Example-Header1 "Plz work header 1";
    proxy_set_header X-Example-Header2 "Plz work header 2";
    
    proxy_pass_request_headers on;
    proxy_pass http://service;
}

location /authz {
    internal;
    proxy_pass_header Authorization;
    proxy_set_header Authorization $http_authorization;
    proxy_set_header Content-Length "";
    proxy_set_header X-Original-URI $request_uri;
    proxy_set_header X-Original-METHOD $request_method;
    add_header X-Example-Header3 "Plz work header 3";
    proxy_set_header X-Example-Header4 "Plz work header 4";

    proxy_pass_request_headers on; 

    js_content auth_engine.authorize_operation;
}

Вот код функции JS, используемой в js_content:

      function authorize_operation(r) {

    r.log(JSON.stringify(r.headersIn));
    r.log(JSON.stringify(r.variables));
    
    // ...some code which sends data to OPA...
}

Обе строки кода в не печатать информацию, которая должна быть добавлена ​​конфигурацией NGINX. В частности, первый выводит только заголовки исходного запроса (а не заголовки добавленные конфигурацией) а второй ничего не выводит, только какие-то фигурные скобки.

Есть ли способ исправить это?

1 ответ

2-й запрос вашего вопроса: «r.variables» ничего не печатает.

Для использования переменных в njs (скрипт nginx js) в моем случае помогло указание точного имени переменной, которую вы ищете. например, пытаясь получить доступ к Request-URI:

var uri = r.variables.request_uri

Другие вопросы по тегам