Рейтинг:0

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

флаг cn

Я создаю веб-каталог компаний, в котором работает около 450 сотрудников. В качестве источника данных используется API Microsoft Graph (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 level=1:2 keys_zone=MSGRAPH:10m inactive=48h max_size=1g;

Мой /sites-enabled/по умолчанию:

# Конечная точка для изображения JPEG требует "$value", это предотвращает NGINX от ожидания переменной.
гео $значение {
    по умолчанию "$значение";
}

сервер {
    слушать 443 ssl default_server;

    ssl_certificate /путь/к/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!MD5;

    server_name <опустить_имя_сервера>;


    местоположение / команда {
        # Прокси-экспресс-сервер для использования URL-адреса <server_name>/team.
        proxy_pass http://localhost:5003;
    }

    местоположение ~* /команда/фото/(.*) {
        # Используйте <server_name>/team/photo/<id> в качестве конечной точки для получения изображений Graph API.
        прокси_кэш MSGRAPH;
        proxy_cache_valid 200 1 д;
        proxy_cache_lock включен;
        прокси_буферизация включена;

        # Используйте возврат ниже, чтобы убедиться, что URL-адрес генерируется правильно:
        # вернуть 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 выводят: [ошибка] 1303417#1303417: *34 не определен преобразователь для разрешения graph.microsoft.com, клиент: 192.168.91.224, сервер: <myservername>, запрос: «GET /team/photo/27fbd9bf-a05e-4a26-b019-544135793cdb HTTP/1.1", хост: "<myservername>", реферер: "https://<myservername>/team/", однако я не уверен, что мне нужно сделать, чтобы решить эту проблему.

Заранее спасибо!

Рейтинг:0
флаг cn

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

местоположение ~* /команда/фото/(.*) {
    прокси_кэш MSGRAPH;
    proxy_cache_valid 200 1 д;
    proxy_cache_lock включен;
    прокси_буферизация включена;

    резольвер 8.8.8.8; # использовать google dns для решения проблемы с распознавателем...

    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Хост $host;

    proxy_ignore-headers Cache-Control; # перезаписать заголовки управления кешем API
    add_header X-кэш $upstream_cache_status; # можно увидеть попал ли кеш или промахнулся

    proxy_pass https://graph.microsoft.com/v1.0/users/$1/photo/$value;
}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.