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

相关内容