我正在建立一個基於 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;
}