API de proxy reverso e cache MS Graph NGINX

API de proxy reverso e cache MS Graph NGINX

Estou construindo um diretório de empresas baseado na web que possui cerca de 450 funcionários. A fonte de dados usada é a API do Microsoft Graph (Azure AD). Esta API exige que você faça uma solicitação para que cada funcionário receba suas fotos, pois elas são enviadas como imagens JPEG (dados binários).

Meu aplicativo é um aplicativo ReactJS hospedado por ExpressJS e com proxy reverso com NGINX. Espero poder acelerar a busca de imagens armazenando em cache as imagens dos funcionários com o NGINX.

A chamada de API para cada funcionário é:https://graph.microsoft.com/v1.0/users/${ID}/photo/$value

Aqui está o que tenho até agora, mas sou relativamente novo no NGINX, então preciso de alguma orientação:

Meu nginx.conf:

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

Meu /sites-enabled/default:

# 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;
    }
}

Apesar do acima exposto, cada vez que tento buscar usando o endpoint: https://<myservername>.com/team/photo/ff036b33-e41f-4a9d-9530-d6fd8ed97b1d, recebo um erro 502 Gateway.

Meus logs de erros do NGINX estão exibindo: [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/", no entanto, não tenho certeza do que preciso fazer para resolver isso.

Desde já, obrigado!

Responder1

Para qualquer pessoa que tenha um problema semelhante, precisei adicionar um resolvedor para corrigir os erros que estava vendo no log. Depois disso, não houve erro, mas também não tive nada armazenado em cache. Precisei adicionar algumas diretivas ao meu bloco de localização, que agora se parece com:

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;
}

informação relacionada