시간 telnet localhost 443 또는 # 시간 telnet localhost 80

시간 telnet localhost 443 또는 # 시간 telnet localhost 80

http 및 https 포트로 구성된 CentOS 6.7 Apache 서버 버전인 Apache/2.4.7(Unix) 서버가 있습니다. SSL 특정 설정을 제외하고는 동일하게 구성됩니다.

가장 관련성이 높은 설정은

KeepAlive on
MaxKeepAliveRequests 50
KeepAliveTimeout 65
Timeout 65
AcceptFilter https none

.htaccess 파일이나 기타 명백한 구성 파일은 없습니다.

하지만 다음과 같은 명령을 사용하여 원래 연결 시간 초과를 테스트하면

시간 telnet localhost 443 또는 # 시간 telnet localhost 80

예상치 못한 잘못된 결과가 나타납니다.

http의 경우 나는 얻는다

time telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

real    0m51.423s
user    0m0.001s
sys     0m0.002s

SSL https의 경우

time telnet localhost 443
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Connection closed by foreign host.

real    0m20.018s
user    0m0.001s
sys     0m0.002s

보시다시피 nighter는 65초, http의 경우 50초, https의 경우 20초의 예상 시간 제한을 표시합니다.

구성 파일에는 재정의 시간 제한이 설정되어 있지 않습니다.

커널 TCP 설정도 고려했습니다. tcp_fin_timeout=60 tcp_keepalive_time=7200 tcp_synack_retries=5

SSL에 대한 이 20초는 어디에서 발생합니까? 연결 유지 설정 및 시간 초과 설정이 무시되는 이유는 무엇입니까? SSL에는 http와 다른 "KeepAlive" 및/또는 "Timeout" 키워드 형식이 있습니까?

답변1

리눅스를 사용하고 계시기 때문에,AcceptFilterTCP_DEFER_ACCEPTLinux에서 소켓 옵션을 사용하는 기능입니다 . Apache 소스 코드는 httpd이를 위해 30초의 소켓 옵션 값이 사용됨을 보여줍니다(하드코딩됨).

만약에너의 아파치반품모듈을 사용하면 mod_reqtimeout이것이 기본 동작일 수 있습니다.RequestReadTimeout참가하다. 기본적으로 RequestReadTimeout대기적어도클라이언트 연결 시간이 초과되기 전에 헤더를 읽는 데 20초가 걸립니다.

그래서 이것들을 종합하면,아마도HTTP 요청 시간이 50초 초과된 것을 볼 수 있습니다.아니요HTTP를 비활성화합니다 (HTTPS만 해당). 이는 30초( ) + 20초( ) AcceptFilter가 있음을 의미합니다 . AcceptFilterRequestReadTimeout하지만비활성화한 HTTPS 요청에 대해 AcceptFilter다음과 같은 문제가 발생한 것 같습니다.오직20초의 시간 초과로 인해 RequestReadTimeout.

도움이 되었기를 바랍니다!

답변2

당신은요청 시간이 초과되었습니다아파치 모듈이 로드되어 있나요?

이 명령을 시도하고 다음을 확인하세요.apachectl -M | grep reqtimeout

그렇다면 기본값은 20초입니다.http://httpd.apache.org/docs/2.4/mod/mod_reqtimeout.html:

구문: RequestReadTimeout [header=timeout[-maxtimeout][,MinRate=rate] [body=timeout[-maxtimeout][,MinRate=rate]

기본값: 헤더=20-40, MinRate=500 본문=20, MinRate=500


당신은 할 수변화이는 60초(요청 수락을 포함하여 최대 90초)이며 /etc/httpd/conf/httpd.conf(또는 일부 vhosts.conf 유형 파일)에 다음 내용을 포함합니다.

RequestReadTimeout header=60-90,MinRate=500 body=60-90,MinRate=500


당신은 또한 수시험다음 명령을 사용하기 전/후:

time openssl s_client -connect your.ip.address.here:443

나를 위한:

앞으로

real    0m20.222s
user    0m0.012s
sys 0m0.000s

뒤쪽에

real    1m0.527s
user    0m0.017s
sys 0m0.006s

관련 정보