NGINX 反向代理和快取 MS Graph API

NGINX 反向代理和快取 MS Graph API

我正在建立一個基於 Web 的公司目錄,其中約有 450 名員工。使用的資料來源是 Microsoft Graph API (Azure AD)。此 API 要求您向每位員工發出請求以接收他們的照片,因為它們以 JPEG 影像(二進位資料)形式發送。

我的應用程式是一個由 ExpressJS 託管的 ReactJS 應用程序,並透過 NGINX 進行反向代理。我希望可以透過使用 NGINX 快取員工影像來加快影像擷取速度。

每位員工的 API 呼叫是:https://graph.microsoft.com/v1.0/users/${ID}/photo/$value

這是我到目前為止所掌握的內容,但我對 NGINX 還很陌生,所以我需要一些指導:

我的 nginx.conf:

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

我的/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-d6fd8ed97b1d,我都會收到 502 網關錯誤。

我的 NGINX 錯誤日誌正在輸出:[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/",但是,我不確定需要做什麼來解決這個問題。

先致謝!

答案1

對於遇到類似問題的任何人,我需要添加一個解析器來修復我在日誌中看到的錯誤。之後,沒有錯誤,但我也沒有快取任何內容。我需要為我的位置區塊添加一些指令,現在看起來像:

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

相關內容