업스트림 응답이 임시 파일로 버퍼링 됨


61

나는 오히려 크고 느린 (복잡한 데이터, 복잡한 프론트 엔드) 웹 응용 프로그램의 구축이 RoR에 의해 제공 Pumanginx같은 역방향 프록시를. nginx오류 로그를 보면 다음과 같은 몇 가지 항목이 있습니다.

2014/04/08 09:46:08 [warn] 20058#0: *819237 an upstream response is buffered to a temporary file 
    /var/lib/nginx/proxy/8/47/0000038478 while reading upstream, 
    client: 5.144.169.242, server: engagement-console.foo.it, 
    request: "GET /elements/pending?customer_id=2&page=2 HTTP/1.0", 
    upstream: "http://unix:///home/deployer/apps/conversationflow/shared/sockets/puma.sock:/elements/pending?customer_id=2&page=2", 
    host: "ec.reputationmonitor.it", 
    referrer: "http://ec.foo.it/elements/pending?customer_id=2&page=3"

페이지가 다른 사용자와 다른 사용자 상호 작용에 대해 동일하게 유지 될 가능성이 거의 없기 때문에 다소 궁금합니다. 디스크에서 응답을 버퍼링하는 것이 필요 / 유용하다고 생각하지 않습니다.

나는 그것을 알고 proxy_max_temp_file_size0으로 설정하지만 조금 어색해 보입니다 (프록시는 버퍼링하려고하지만 버퍼링 할 파일이 없습니다 ... 어떻게 더 빠를 수 있습니까?).

내 질문은 :

  1. [경고]를 제거하고 버퍼링 응답을 피하려면 어떻게해야합니까? 끄 proxy_buffering거나 proxy_max_temp_file_size0 으로 설정 하는 것이 더 낫 습니까? 왜?

  2. nginx응답을 버퍼링하는 경우 : 버퍼링 된 응답을 언제, 누구에게, 왜 제공합니까?

  3. 왜 기본적 nginx으로 proxy_buffering켜져 있고 실제로 응답을 버퍼링하면 [경고]합니까?

  4. 응답이 언제 해당 옵션을 트리거합니까? 응답을 제공하는 데 몇 초 (얼마나 많은 시간)가 걸립니까? 이 구성 가능합니까?

TIA, NWG.


1
버퍼링과 캐싱을 혼동하는 느낌이 듭니다. 버퍼링은 메모리 할당에서 허용하는 것보다 많은 데이터를로드 할 수있는 절차입니다.
슬라브

답변:


75

1) 어떻게 [경고]를 제거하고 버퍼링 응답을 피할 수 있습니까? proxy_buffering을 끄거나 proxy_max_temp_file_size를 0으로 설정하는 것이 더 낫습니까? 왜?

proxy_max_temp_file_size제거하려면 0으로 설정해야 합니다. proxy_buffering지시어 직접 경고 관련이 없습니다. 버퍼링을 중지하기 위해 스위치를 끌 수는 있지만 일반적으로 권장되지는 않습니다 ( Comet에 필요하지 않은 경우 ).

2) nginx가 언제 버퍼링 된 응답을 제공 할 때 응답을 버퍼링하면 누구에게, 왜?

즉시 서버이지만 클라이언트는 일반적으로 연결 속도가 훨씬 느리며 응용 프로그램에서 생성 한 속도만큼 응답 데이터를 사용할 수 없습니다. Nginx는 애플리케이션을 최대한 빨리 릴리스하기 위해 전체 응답을 버퍼링하려고합니다.

참조 : http://aosabook.org/en/nginx.html

3) 왜 nginx가 기본적으로 proxy_buffering을 켠 다음 실제로 응답을 버퍼링하면 [경고]합니까?

이미 언급했듯이 proxy_buffering경고와 직접 관련이 없습니다. 일반적으로 최적화 된 프록시 작업에 필요하며이를 끄면 성능과 처리량이 저하됩니다.

Nginx는 응답이 구성된 메모리 버퍼에 맞지 않을 때만 경고합니다. 괜찮다면 경고를 무시해도됩니다.

4) 응답이 언제 해당 옵션을 트리거합니까? 응답을 제공하는 데 몇 초 이상 걸리는 경우 (얼마나 많은가?)? 이 구성 가능합니까?

메모리 버퍼가 가득 차면 트리거됩니다. 문서를 살펴보십시오. 전체 메커니즘이 설명되어 있습니다 : http://nginx.org/r/proxy_max_temp_file_size

메모리 버퍼를 늘릴 수 있습니다.


5
# 1의 경우 임시 파일의 크기 제한을 제거하면 버퍼링 경고가 어떻게 방지됩니까? 이 지시문을 0으로 설정했지만 경고 메시지가 표시되므로 이것이 올바른 것으로 생각하지 않습니다.
Phil

성능은 설정하기이 답변이 충분히 명확하지, 그것은 더 나은 proxy_max_temp_file_size0또는이 아니라 경고를 제거하는 방법?
Offir Pe'er

12

다음 구성은 서버에서 제대로 작동합니다.

proxy_buffers 16 16k;  
proxy_buffer_size 16k;

2
두 번째 지시문이 중복되어 있습니까, 즉 16k첫 번째 행 의 두 번째 지시문이 두 번째 행과 정확히 같은 작업을 수행합니까?
EoghanM

1
문서에 따라 @EoghanM. Proxy_Buffer_size (복수가 아닌 버퍼)는 프록시 서버 응답의 첫 번째 부분 (일명 헤더)에 적용 Sets the size of the buffer used for reading the first part of the response received from the proxied server. This part usually contains a small response header됩니다. Proxy_buffers는 나머지 응답을위한 것입니다.
cde

2
오늘 내 머리카락 일부를 구하셨습니다. 나는 nginx를 서버에서 도커 컨테이너로 옮기고 있었고 매우 느리게 시작했습니다. 이것은 그것을 "고정"했다. 서버의 버전이 기본적으로 켜져 있는지 확실하지 않지만 컨테이너의 버전에는 이러한 설정이 필요했습니다.
Krystian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.