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/"
但是,我不確定我需要做什麼來解決這個問題。提前致謝!
對於遇到類似問題的任何人,我需要添加一個解析器來修復我在日誌中看到的錯誤。之後,沒有錯誤,但我也沒有記憶體任何東西。我需要在我的位置塊中添加一些指令,現在看起來像:
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; }