NGINX Reverse Proxy und Cache MS Graph API

NGINX Reverse Proxy und Cache MS Graph API

Ich erstelle ein webbasiertes Firmenverzeichnis mit rund 450 Mitarbeitern. Als Datenquelle dient die Microsoft Graph API (Azure AD). Diese API erfordert, dass Sie für jeden Mitarbeiter eine Anfrage stellen, um seine Fotos zu erhalten, da diese als JPEG-Bilder (Binärdaten) gesendet werden.

Meine Anwendung ist eine ReactJS-App, die von ExpressJS gehostet und mit NGINX umgekehrt geproxied wird. Ich hoffe, dass ich das Abrufen von Bildern beschleunigen kann, indem ich die Mitarbeiterbilder mit NGINX zwischenspeichere.

Der API-Aufruf für jeden Mitarbeiter lautet:https://graph.microsoft.com/v1.0/users/${ID}/photo/$value

Hier ist, was ich bisher habe, aber ich bin ziemlich neu bei NGINX, also brauche ich etwas Anleitung:

Meine nginx.conf:

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

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

https://<myservername>.com/team/photo/ff036b33-e41f-4a9d-9530-d6fd8ed97b1dTrotz des oben Gesagten erhalte ich jedes Mal einen 502-Gateway-Fehler, wenn ich versuche, den Datenabruf über den Endpunkt durchzuführen:.

Meine NGINX-Fehlerprotokolle geben Folgendes aus: [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/"Ich bin jedoch nicht sicher, was ich tun muss, um das Problem zu beheben.

Dank im Voraus!

Antwort1

Für alle, die auf ein ähnliches Problem stoßen: Ich musste einen Resolver hinzufügen, um die Fehler zu beheben, die ich im Protokoll sah. Danach gab es keinen Fehler mehr, aber ich hatte auch nichts zwischengespeichert. Ich musste meinem Standortblock einige Anweisungen hinzufügen, der jetzt so aussieht:

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

verwandte Informationen