NGINX Proxy inverso y caché MS Graph API

NGINX Proxy inverso y caché MS Graph API

Estoy creando un directorio de empresas basado en la web que tiene aproximadamente 450 empleados. La fuente de datos que se utiliza es Microsoft Graph API (Azure AD). Esta API requiere que realices una solicitud para que cada empleado reciba sus fotos, ya que se envían como imágenes JPEG (datos binarios).

Mi aplicación es una aplicación ReactJS alojada por ExpressJS y con proxy inverso con NGINX. Espero poder acelerar la recuperación de imágenes almacenando en caché las imágenes de los empleados con NGINX.

La llamada API para cada empleado es:https://graph.microsoft.com/v1.0/users/${ID}/photo/$value

Esto es lo que tengo hasta ahora, pero soy bastante nuevo en NGINX, por lo que necesito orientación:

Mi nginx.conf:

proxy_cache_path /etc/nginx/msgraph levels=1:2 keys_zone=MSGRAPH:10m inactive=48h max_size=1g;

Mis /sitios habilitados/predeterminado:

# The endpoint for the JPEG image requires "$value", this prevents NGINX from expecting a variable.
geo $value {
    default "$value";
}

server {
    listen 443 ssl default_server;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5;

    server_name <omit_server_name>;


    location /team {
        # Proxy express server to use the <server_name>/team URL.
        proxy_pass http://localhost:5003;
    }

    location ~* /team/photo/(.*) {
        # Use <server_name>/team/photo/<id> as endpoint for fetching Graph API images.
        proxy_cache MSGRAPH;
        proxy_cache_valid 200 1d;
        proxy_cache_lock on;
        proxy_buffering on;

        # Use below return to confirm URL is being generated correctly:
        # return 200 https://graph.microsoft.com/v1.0/users/$1/photo/$value;

        proxy_pass https://graph.microsoft.com/v1.0/users/$1/photo/$value;
    }
}

A pesar de lo anterior, cada vez que intento recuperar usando el punto final:, https://<myservername>.com/team/photo/ff036b33-e41f-4a9d-9530-d6fd8ed97b1daparece un error de puerta de enlace 502.

Mis registros de errores de NGINX muestran: [error] 1303417#1303417: *34 no resolver defined to resolve graph.microsoft.com, client: 192.168.91.224, server: <myservername>, request: "GET /team/photo/27fbd9bf-a05e-4a26-b019-544135793cdb HTTP/1.1", host: "<myservername>", referrer: "https://<myservername>/team/", sin embargo, no estoy seguro de qué debo hacer para resolver esto.

¡Gracias de antemano!

Respuesta1

Para cualquiera que tenga un problema similar, necesitaba agregar un solucionador para corregir los errores que veía en el registro. Luego, no hubo ningún error pero tampoco tenía nada en caché. Necesitaba agregar algunas directivas a mi bloque de ubicación, que ahora se ve así:

location ~* /team/photo/(.*) {
    proxy_cache MSGRAPH;
    proxy_cache_valid 200 1d;
    proxy_cache_lock on;
    proxy_buffering on;

    resolver 8.8.8.8;  # use google dns to handle resolver issue...

    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Host $host;

    proxy_ignore-headers Cache-Control;  # overwrite API cache control headers
    add_header X-Cache $upstream_cache_status; # can see if cache HIT or MISS

    proxy_pass https://graph.microsoft.com/v1.0/users/$1/photo/$value;
}

información relacionada