2016-09-28 8 views
2

설정 당 쓰기 제한 시간어떻게 오징어 연결을 구성하는 방법 | 읽기 | 요청하는 대신 전 세계적으로

나도 같은 오징어 인스턴스를 사용하여 두 개의 서로 다른 HTTP 클라이언트가 있다고 가정합니다.

ClientA라는 첫 번째 클라이언트의 공격적인 Http 읽기/쓰기 및 연결 시간 제한은 5 초입니다. ClientB라는 다른 클라이언트의 시간 제한은 120 초입니다.

내 오징어 서버 구성

은 같다 :

connect_timeout 1 minute 
read_timeout 1 minute 
write_timeout 1 minute 

시나리오 1

ClientA는 다음 접속을 수락하고 전에 45 초가 기다린다 (오징어를 통해) SERVERX에 요청을 전송 즉시 답합니다.

질문 1

ClientA 5 초 후에 시간 초과하지만, 그 통지 오징어와 아웃 바운드에게 연결을 닫거나 (40 ~ 초) SERVERX 응답을 기다려 그 결과를 다시 작성 실패 더 이상 듣지 않는 ClientA?

시나리오 2

ClientB는 연결을 승인하기 전에 61초 기다렸다가 다시 즉시 답한다 (오징어를 통해) ServerY에 요청을 전송한다.

질문 2

ClientB 시간 초과되지 않습니다 만, 오징어 60 초 후에 시간 초과 및 오른쪽 ClientB에 HTTP 시간 초과 (408)를 전송해야합니까?

글로벌 질문

그래서 우리는 요청에 의해 시간 제한을 설정하는 대신 전세계의 서비스 수준에서 할 수 있습니다 설정 오징어 어떤 방법이 있나요?

답변

2

중요 사항 : 시간 초과에 관한 squid의 동작은 사용 된 프로토콜에 따라 변경 될 수 있습니다. HTTPS의 경우 터널링 된 연결의 HTTP 헤더를 검사 할 수 없으므로 Connection, Proxy-Connection 또는 Keep-Alive: timeout=xx 값을 사용할 수 없습니다.

시나리오 1

멀리가는 클라이언트가 통지로 오징어는 즉시 아웃 바운드 연결을 닫습니다. 오징어는 참으로 타임 아웃,하지만 결과는 사용되는 프로토콜에 따라 달라집니다 것

시나리오 2

. HTTP의 경우 "504 Gateway Time-out"을 반환하고 추가 헤더 "X-Squid-Error: ERR_READ_TIMEOUT 0"을 추가합니다.

HTTPS의 경우 클라이언트가 의미있는 헤더를 읽거나 삽입 할 수 없기 때문에 HTTPS가 연결을 종료합니다.

글로벌 질문

하지 오징어 구성 자체이다. 지속적 연결의 시간 제한을 세부적으로 제어하려면 클라이언트에서 그렇게해야합니다. server_persistent_connections> 서버 -

오징어 < persistent_request_timeout, client_persistent_connections : -> 오징어

클라이언트 < :

기록을 위해

, 여기에 시간 제한 설정이 영구 연결에 대한 명예를 위해 노력할 것 오징어입니다 , pconn_timeout, read_timeout (HTTPS의 경우)