Estoy tratando de usar el módulo auth_request para verificar si un usuario puede acceder a un archivo determinado. El usuario publica la solicitud en /my/download/uri/<File ID> . Quiero que la solicitud de autorización se publique en auth_service:9999/files/<File ID> . La parte relevante de mi configuración es la siguiente:
location /my/download/uri { auth_request /auth/files/$uri; alias /my/file/directory; } location /auth { internal; proxy_pass http://auth_service:9999/; proxy_pass_request_body off; proxy_set_header Content-Length ""; } El servicio de autorización recibe la solicitud, pero literalmente en /files/$uri ; la variable no se coloca. Primero intenté preparar el URI a través de una variable set , pero fue en vano. ¿Cómo puedo hacer que nginx dirija correctamente la solicitud de autorización?
(Nota: sé que puedo incluir la solicitud original en el encabezado de la solicitud de autorización a través X-Original-URI . Sin embargo, esto significaría que tengo que realizar un procesamiento adicional del URI completo en el servidor de autorización para obtener los datos relevantes , lo que preferiría no hacer si hay una forma de publicar la solicitud de autorización en el URI correcto en primer lugar).
No puede usar variables en auth_request. Aparentemente, esta es una opción de diseño para nginx https://trac.nginx.org/nginx/ticket/761 Se me ocurrió esto a través de prueba y error. Tuve problemas para poner $uri en una variable, no estoy seguro de por qué.
location ~ /my/download/uri/(.*) { set $key $1 auth_request /auth; alias /my/file/directory; } location /auth { internal; proxy_pass http://auth_service:9999/$key; proxy_pass_request_body off; proxy_set_header Content-Length ""; }