NGINX 역방향 프록시 및 캐시 MS 그래프 API

NGINX 역방향 프록시 및 캐시 MS 그래프 API

저는 대략 450명의 직원이 있는 웹 기반 회사 디렉토리를 구축 중입니다. 사용되는 데이터 원본은 Microsoft Graph API(Azure AD)입니다. 이 API를 사용하려면 사진이 JPEG 이미지(바이너리 데이터)로 전송되므로 모든 직원에게 사진 수신을 요청해야 합니다.

내 애플리케이션은 ExpressJS에서 호스팅하고 NGINX로 역방향 프록시되는 ReactJS 앱입니다. 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-d6fd8ed97b1d502 게이트웨이 오류가 발생합니다.

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

관련 정보