2016-11-09 70 views
0

我在apgateway控制檯中創建了一個API,它用作運行java應用程序的後端服務器的http代理。我們部署了api,創建了一個通過cloudfront託管的自定義域。現在,當我在我的web應用程序中使用新的cloundfront URL時,某些API不會立即返回。相同的行爲甚至可以捲曲命令aws apigateway的不一致響應

curl -v -H "Cookie:session_token=llzAwur3FZS78po6b21FEgvXzDUFY3" https://xyz.execute-api.us-east-1.amazonaws.com/test/api/folder/roo 

同一API端點將具有不同的響應時間被注意到(有時是大約1秒,有時也可以是幾秒鐘)。有時它也會超時。後端服務器(jetty)請求日誌顯示響應是即時發送的。我們如何調查我們的API網關部署出了什麼問題?

例如,我有來自網關的這兩個響應。壞一個

< HTTP/1.1 504 Gateway Time-out 
< Content-Type: text/html 
< Content-Length: 669 
< Connection: keep-alive 
< Server: CloudFront 
< Date: Fri, 11 Nov 2016 12:27:14 GMT 
< X-Cache: Error from cloudfront 
< Via: 1.1 xyz.cloudfront.net (CloudFront) 
< X-Amz-Cf-Id: Wfjk3bqdwhAbFQhzerMd0DJ5t_2xAF6E_NUTvqif1p9cb9E-jy0GUw== 
< 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> 
<TITLE>ERROR: The request could not be satisfied</TITLE> 
</HEAD><BODY> 
<H1>ERROR</H1> 
<H2>The request could not be satisfied.</H2> 
<HR noshade size="1px"> 
CloudFront attempted to establish a connection with the origin, but either the attempt failed or the origin closed the connection. 
<BR clear="all"> 
<HR noshade size="1px"> 
<PRE> 
Generated by cloudfront (CloudFront) 
Request ID: 881Muk_9up7A0phYvmmchNkYWj16yFCsthuKFivS2vbtpULtCk9lnw== 
</PRE> 
<ADDRESS> 
</ADDRESS> 
* Connection #0 to host ulj2mxzix6.execute-api.us-east-1.amazonaws.com left intact 
</BODY></HTML> 

而且this--好一個

< HTTP/1.1 200 OK 
< Content-Type: application/json;charset=UTF-8 
< Content-Length: 1839 
< Connection: keep-alive 
< Date: Fri, 11 Nov 2016 12:28:43 GMT 
< x-amzn-Remapped-Connection: keep-alive 
< x-amzn-Remapped-Content-Length: 1839 
< x-amzn-Remapped-Date: Fri, 11 Nov 2016 12:28:43 GMT 
< x-amzn-Remapped-Server: nginx/1.4.6 (Ubuntu) 
< x-amzn-RequestId: 621bff67-a80a-11e6-bb0a-1bc973821ef5 
< X-Cache: Miss from cloudfront 
< Via: 1.1 1d43f56d3213a63608863fd0e49585b9.cloudfront.net (CloudFront) 
< X-Amz-Cf-Id: ZGwu2NAXKCouMssDjHwSnjyWXe4OFukmeyL7nzC_Y4Lz6QnixdhbEg== 

編輯/分辨率:

正如答覆中提到下面我不得不禁用頭獲得的內容長度響應標題。我使用Spring MVC中的REST API實現,並添加以下過濾器似乎已經完成了招

<filter> 
     <filter-name>bufferFilter</filter-name> 
     <filter-class>org.springframework.web.filter.ShallowEtagHeaderFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>bufferFilter</filter-name> 
     <url-pattern>/api/*</url-pattern> 
    </filter-mapping> 
+0

您是否在API網關前放置了CloudFront分配? –

+0

是的。我創建了一個具有SSL證書的自定義域。正如我所提到的,curl命令有時會起作用,但它大部分會掛起或需要一分鐘左右才能返回。任何幫助解決我的問題,將不勝感激。謝謝 –

+0

您是否創建了自定義域並指向您自己的CloudFront分配,然後指向API網關? –

回答

0

當你的後端使用Transfer-Encoding: chunked此錯誤,通常會導致。

我們正在推進更新服務以緩解此問題,但與此同時您可能希望從後端禁用分塊編碼。

+0

謝謝。我認爲這是訣竅 –