NGINX - 클라이언트가 Proxy_pass를 사용하는 업스트림 서버보다 느리면 어떻게 되나요?

NGINX - 클라이언트가 Proxy_pass를 사용하는 업스트림 서버보다 느리면 어떻게 되나요?

with proxy_pass - 업스트림 서버가 12MBPS로 nginx 서버에 콘텐츠를 푸시하지만 콘텐츠를 읽는 클라이언트가 1.2MBPS 연결을 사용하는 등 클라이언트의 연결 속도가 업스트림 서버보다 느린 경우 NGINX는 상황을 어떻게 처리합니까?

    location / {

    proxy_buffering    off;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_buffer_size  128k;
    proxy_buffers 100  128k;
    proxy_set_header        Host            $host;
    proxy_set_header        X-Real-IP   $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass https://proxy.backend.server;}

이 경우, Proxy_buffering이 꺼집니다. Nginx는 클라이언트가 데이터의 해당 지점에 도달할 때 제공될 데이터를 저장합니까?

답변1

문서에서 찾을 수 있습니다proxy_buffering:

버퍼링이 비활성화되면 응답은 수신되는 즉시 클라이언트에 동기적으로 전달됩니다. nginx는 프록시 서버의 전체 응답을 읽으려고 시도하지 않습니다. nginx가 서버로부터 한 번에 수신할 수 있는 최대 데이터 크기는 Proxy_buffer_size 지시어에 의해 설정됩니다.

즉, NGINX는 백엔드에 더 오랫동안 연결되어 있습니다(클라이언트가 전체 응답을 다운로드해야 하는 한). 버퍼링이 비활성화되면 클라이언트와 백엔드 간의 연결은 동기식입니다.

프록시 버퍼링을 끌지 여부는 리소스에 따라 다릅니다. 일반적으로 PHP-FPM과 같이 리소스가 부족한 백엔드의 경우 클라이언트가 응답을 다운로드하는 동안 백엔드를 정지 상태로 두는 것은 권장되지 않습니다. 따라서 PHP-FPM을 백엔드로 사용하는 경우(fastcgi_buffering이 올바른 지시어임) 이를 유지하겠습니다.

프록시 버퍼링이 비활성화된 경우에도 Proxy_buffer_size 지시문과 같은 일부 버퍼링이 여전히 존재한다는 점도 주목할 가치가 있습니다. 소개입니다정확한 크기. 제목만 포함되어 있습니다. 128k는 (아마도) 일반적인 HTML 페이지의 크기입니다. HTTP 헤더는 이보다 훨씬 작습니다.

관련 정보