Обратный прокси-сервер NGINX и кэширование API MS Graph

Обратный прокси-сервер NGINX и кэширование API MS Graph

Я создаю веб-каталог компании, в котором около 450 сотрудников. Источником данных является Microsoft Graph API (Azure AD). Этот API требует, чтобы вы сделали запрос для каждого сотрудника, чтобы получить его фотографии, поскольку они отправляются как изображения JPEG (двоичные данные).

Мое приложение — это приложение ReactJS, размещенное на ExpressJS и обратно проксируемое с помощью 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

Для тех, кто сталкивается с похожей проблемой, мне нужно было добавить resolver, чтобы исправить ошибки, которые я видел в журнале. После этого ошибок не было, но у меня также ничего не кэшировалось. Мне нужно было добавить несколько директив в мой блок location, который теперь выглядит так:

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

Связанный контент