nginx proxy auth-request

Configuración de encabezados con NGINX auth_request y oauth2_proxy



auth-request (1)

Quiero usar auth_request y oauth2_proxy para establecer un encabezado en una solicitud de autenticación exitosa y luego pasarla al próximo proxy en línea que manejará la solicitud real.

He configurado NGINX y los diversos proxies para que hagan su trabajo, sin embargo, no estoy seguro de cómo configurar el encabezado desde el servidor (AUTH PROXY en el diagrama) que estoy usando para la solicitud de autenticación, de modo que ese encabezado se pase al siguiente servidor (SERVIDOR BACKEND en diagrama)

NGINX ---- auth request ----> AUTH PROXY | | <--- 201 <------ SUCCESS | ----> underlying request ----> BACKEND SERVER

Mi configuración NGINX se parece a

server { listen 9123; resolver 10.3.0.2; resolver_timeout 30; location / { auth_request /_auth; proxy_set_header x-user $http_x_user; proxy_pass http://backend_server; } location = /_auth { internal; proxy_pass https://auth; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Original-URI $request_uri; } }

Cuando hago la solicitud real, veo lo siguiente en los registros de depuración de NGINX (esto es parte de la respuesta del servidor de autenticación):

2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "Content-Type: text/html; charset=utf-8" 2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "Date: Mon, 14 Oct 2013 17:46:42 GMT" 2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "Server: nginx/1.2.5" 2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "Vary: Cookie" 2013/10/14 17:46:42 [debug] 31222#0: *4 http proxy header: "x-user: 1"

Quiero tomar el encabezado de x-user y pasarlo al servidor backend.

He probado varias combinaciones en la location / bloque, pero ninguna de ellas ha funcionado todavía. P.ej

  • proxy_set_header x-user $upstream_http_x_user;
  • proxy_set_header x-user $http_x_user;
  • proxy_set_header x-user $sent_http_x_user;
  • proxy_pass_header x-user

Ninguno de estos parece funcionar. ¿Alguna idea de cómo puedo realizar esta tarea? Tenga en cuenta que es el proxy de autenticación el que configura el encabezado que deseo pasar al servidor backend,


Woop, lo descubrió. La configuración correcta de NGINX se ve así:

location / { auth_request /_auth; auth_request_set $user $upstream_http_x_user; proxy_set_header x-user $user; proxy_pass http://backend_server; }

El problema es que no puede asignar el encabezado directamente a otro encabezado, tiene que usar auth_request_set para establecer el encabezado en una variable y luego asignar esa variable a un encabezado.