Nginx

NGINX 反向代理和記憶體 MS Graph API

  • April 25, 2022

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

引用自:https://serverfault.com/questions/1099218