2012-03-07 5 views
2

Amazon Cloudfront에 액세스하려고 할 때 PHP에서 cURL을 사용하여 이상한 시간 초과가 발생합니다. 이것은 배포 요청을 만드는 모든 무효 요청에 영향을 미치는 것 같습니다. cURL은 0 바이트 또는 매우 적은 바이트 수를보고 한 다음 시간 초과를보고합니다 : Operation timed out after 120000 milliseconds with 88 out of 619 bytes received.PHP cURL 및 SSL로 이상한 시간 초과

시간 초과 설정을 확장해도 차이가없는 것처럼 보입니다.

* About to connect() to cloudfront.amazonaws.com port 443 (#0) 
* Trying 72.21.215.67... * connected 
* Connected to cloudfront.amazonaws.com (72.21.215.67) port 443 (#0) 
* skipping SSL peer certificate verification 
* SSL connection using SSL_RSA_WITH_RC4_128_MD5 
* Server certificate: 
* subject: CN=cloudfront.amazonaws.com,O=Amazon.com Inc.,L=Seattle,ST=Washington,C=US 
* start date: Jul 30 00:00:00 2010 GMT 
* expire date: Jul 29 23:59:59 2013 GMT 
* common name: cloudfront.amazonaws.com 
* issuer: CN=VeriSign Class 3 Secure Server CA - G2,OU=Terms of use at https://www.verisign.com/rpa (c)09,OU=VeriSign Trust Network,O="VeriSign, Inc.",C=US 
> POST /2010-11-01/distribution/E1CIM4A92QFD98/invalidation HTTP/1.1 
User-Agent: S3/php 
Accept: */* 
Host: cloudfront.amazonaws.com 
Date: Wed, 07 Mar 2012 14:31:58 GMT 
Content-Type: application/xml 
Authorization: AWS ************************ 
Content-Length: 200 

< HTTP/1.1 201 Created 
< x-amzn-RequestId: 4c2d0d3f-6862-11e1-ac27-5531ac8c967f 
< Location: https://cloudfront.amazonaws.com/2010-11-01/distribution/E1CIM4A92QFD98/invalidation/I35KLNROKA40FU 
* Operation timed out after 120000 milliseconds with 0 bytes received 
* Closing connection #0 

this question과 비슷한 것 같다 CURLOPT_VERBOSE를 사용하여 추적을 퍼팅

이 출력을 생성합니다. 그러나 필자의 경우 curl은 실제로 응답을 얻었지만 어떻게 든 그것을 무시하고 시간 초과되는 것처럼 보입니다. 내가보기에 응답이 수신되었고 (201 Created ...), SSL 오류가 없습니다. 그렇다면 컬 타임 아웃은 왜 발생합니까 ??

컬 버전 정보를 당신이 당신의 컬 세션을 설정하는 방법이보고 도움이 될

[version_number] => 463623 
[age] => 3 
[features] => 1597 
[ssl_version_number] => 0 
[version] => 7.19.7 
[host] => x86_64-unknown-linux-gnu 
[ssl_version] => NSS/3.12.7.0 
[libz_version] => 1.2.3 
[protocols] => Array ([0] => tftp [1] => ftp [2] => telnet [3] => dict [4] => ldap [5] => ldaps [6] => http [7] => file [8] => https [9] => ftps [10] => scp [11] => sftp) 
+0

그것은'Content-Type : application/xml'과'Content-Length : 200'을 말하고 나서 '0 bytes received ... '는 ** 응답 헤더 **가 도착한 것으로 보이지만이 200 바이트 XML은 아닙니다. ** 응답 본문 **. –

+0

테스트를 수행하고 어떤 일이 발생하는지보기 위해 방화벽을 비활성화하십시오. –

+0

감사합니다. @ J. 브루니. 나는'Content-Length' 헤더가 요청에 대한 것이고, 더 자세히 살펴보면 Location 헤더와 함께 서버 ('HTTP/1.1 201 Created')로부터의 응답이있다. 'with 0 bytes received '는 정확히 문제입니다. 몇 바이트를 받았지만 말려 넘기거나 시간 초과되었습니다 ... 방화벽이 없습니다 – gingerlime

답변

2

아직 컬이 버전이 방식으로 작동 왜 안 완전히 확인 (그것을 버그처럼 보입니다) 그러나 해결책은 여러 버전의 컬과 PHP를 컴파일하는 것입니다 (these instructions)

0

. 당신은 같은 것을하고 있습니까 : 당신은 SSL이 문제를 확인하는 데 문제가 있는지 확인하기 위해

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/CAcerts/BuiltinObjectToken-EquifaxSecureCA.crt"); 

빠른 테스트 것은 :

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
+1

'VERIFYPEER'와'VERIFYHOST' 모두 false이다. 자세한 출력 결과는 SSL 확인 문제를 나타내지 않는다고 생각합니다. 그것은 요청을 보내고, 응답을 받지만, 여전히 시간 초과됩니다 ... – gingerlime