HTTP502 狀態碼(錯誤的閘道) - Amazon CloudFront

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

HTTP502 狀態碼(錯誤的閘道)

CloudFront當CloudFront 無法提供請求的對象時,返回 HTTP 502 狀態碼(錯誤網關),因為它無法連接到原始服務器。

如果您使用的是 Lambda @Edge,則問題可能是 Lambda 驗證錯誤。如果您收到帶有錯NonS3OriginDnsError誤代碼的 HTTP 502 錯誤,則可能是DNS配置問題導致無法連接 CloudFront 到原點。

SSL/CloudFront 和自定義原始服務器之間的TLS協商失敗

如果您使用的自訂來源需要在 CloudFront 和您的來源HTTPS之間,不相符的網域名稱可能會導致錯誤。您原始伺服器上的SSL/TLS憑證必須包含與您為 CloudFront發佈指定的 Origin 網域或原始要求標Host頭相符的網域名稱。

如果域名不匹配,SSL/TLS握手失敗,並 CloudFront 返回HTTP狀態碼 502(錯誤的網關)並將標X-Cache題設置為Error from cloudfront

若要判斷憑證中的網域名稱是否與發行版或Host標頭中的 Origin 網域相符,您可以使用線上SSL檢查程式或開啟SSL。如果網域名稱不相符,您有兩個選項:

  • 取得包含適用網域名稱的新SSL/TLS憑證。

    如果您使用 AWS Certificate Manager (ACM),請參閱使AWS Certificate Manager 者指南中的要求公用憑證以要求新憑證。

  • 更改發行版配置,以便 CloudFront 不再嘗試使用與您的來源SSL進行連接。

在線SSL檢查器

要找到SSL測試工具,請在互聯網上搜索「在線 ssl 檢查器」。一般而言,您可以指定網域的名稱,而工具會傳回有關您SSL/TLS憑證的各種資訊。確認憑證在 Common Name (通用名稱)Subject Alternative Names (主體別名) 欄位中包含您的網域名稱。

打開 SSL

若要協助疑難排解 HTTP 502 錯誤 CloudFront,您可以使用 Open SSL 來嘗試與原始伺服器建立SSL/TLS連線。如果 Open SSL 無法建立連線,可能表示原始伺服器的SSL/TLS組態有問題。如果 Open SSL 能夠建立連線,則會傳回原始伺服器憑證的相關資訊,包括憑證的一般名稱 (Subject CN欄位) 和主體別名 (Subject Alternative Name欄位)。

使用以下「打開」SSL 命令來測試與原始服務器的連接(替換) origin domain 使用原始伺服器的網域名稱,例如 example.com):

openssl s_client -connect origin domain name:443

如果下列為真:

  • 您的原始伺服器支援具有多個SSL/TLS憑證的多個網域名稱

  • 您的分佈設定為將 Host 標頭轉送至原始伺服器

然後將該-servername選項添加到「打開」SSL 命令中,如以下示例所示(替換) CNAME 使用您CNAME的發行版中配置的內容):

openssl s_client -connect origin domain name:443 -servername CNAME

原始伺服器無法回應受支援的加密/通訊協定

CloudFront 使用密碼和通訊協定連線到原始伺服器。如需 CloudFront 支援的密碼和通訊協定清單,請參閱。與來源之間支援的通訊協定 CloudFront 和密碼如果您的來源在SSL/交換中沒有使用這些密碼或協議之一進行響應,TLS則 CloudFront 無法連接。您可以使用線上工具 (例如 Labs) 來驗證您的來源是否支援密碼和通訊協定。SSLHostname (主機名稱) 欄位中輸入原始伺服器的網域名稱,然後選擇 Submit (提交)。從測試來檢閱 Common names (通用名稱)Alternative names (替代名稱) 欄位,查看它們是否符合原始伺服器的網域名稱。測試完成後,在測試結果中找到 Protocols (通訊協定)Cipher Suites (密碼套件) 區段,查看原始伺服器支援哪些密碼加密或通訊協定。將其與 與來源之間支援的通訊協定 CloudFront 和密碼 的清單進行比較。

SSL/來源上的TLS證書已過期,無效,自簽名,或證書鏈在錯誤的順序

如果原始伺服器傳回下列內容,請中 CloudFront TCP斷連線、傳回HTTP狀態碼 502 (錯誤閘道),並將標X-Cache頭設定為Error from cloudfront

  • 過期的憑證

  • 無效的憑證

  • 已自我簽署的憑證

  • 憑證鏈順序錯誤

注意

如果完整的憑證鏈結 (包括中繼憑證) 不存在,則會中 CloudFront TCP斷連線。

如需在自訂原始伺服器上安裝SSL/TLS憑證的相關資訊,請參閱 CloudFront 與您的自訂原始伺服器之間的通訊需要 HTTPS

在原始伺服器設定中原始伺服器無法回應指定的連接埠

當您在 CloudFront 發行版上建立來源時,您可以設定使用 to HTTP 和HTTPS流量 CloudFront 連接到來源的連接埠。默認情況下,這些都是 TCP 80/443。您可以選擇修改這些連接埠。如果您的來源因為任何原因拒絕這些連接埠上的流量,或者您的後端伺服器在連接埠上沒有回應, CloudFront 將無法連線。

若要故障診斷這些問題,請檢查基礎設施中執行的任何防火牆和驗證它們不會封鎖受支援的 IP 範圍。如需詳細資訊,請參閱 Amazon VPC 使用者指南中的 AWS IP 位址範圍。此外,驗證 Web 伺服器是否可在原始伺服器上執行。

Lambda 驗證錯誤

如果您使用的是 Lambda @Edge,HTTP502 狀態碼可能會指出您的 Lambda 函數回應格式不正確或包含無效內容。如需針對 Lambda@Edge 錯誤進行故障診斷的詳細資訊,請參閱測試和偵 Lambda 函數 @Edge

DNS錯誤(NonS3OriginDnsError

帶有錯誤代碼的 HTTP 502 NonS3OriginDnsError 錯誤表示存在DNS配置問題導致無法連接 CloudFront 到原點。如果您從中得到此錯誤 CloudFront,請確保來源的DNS配置正確且可以正常工作。

當 CloudFront 收到對象的請求已過期或不在其緩存中時,它會向來源發出請求以獲取該對象。若要成功向來源提出要求,請在原始網域上 CloudFront 執行DNS解析。如果您網域的DNS服務發生問題,則 CloudFront 無法解析網域名稱以取得 IP 位址,這會導致 HTTP 502 錯誤 (NonS3OriginDnsError)。若要修正此問題,請聯絡您的DNS供應商,或者,如果您使用的是 Amazon Route 53,請參閱為什麼我無法存取使用 Route 53 DNS 服務的網站?

若要進一步疑難排解此問題,請確保原始伺服器根網域的 authoritative name servers (授權名稱伺服器) 或 Zone Apex (例如 example.com) 正確運作。您可以使用以下命令來尋找適用於 apex 原始伺服器的名稱,使用 dignslookup 等工具:

dig OriginAPEXDomainName NS +short
nslookup -query=NS OriginAPEXDomainName

當您有名稱伺服器的名稱時,請使用下列命令針對他們的原始伺服器的網域名稱做查詢,以確保每個回應都有一個答案:

dig OriginDomainName @NameServer
nslookup OriginDomainName NameServer
重要

請務必使用連線至公用網際網路的電腦執行此DNS疑難排解。 CloudFront 使用網際網路DNS上的 public 來解析原始網域,因此在類似的內容中進行疑難排解很重要。

如果您的來源是一個子網域,其DNS授權委派給與根網域不同的名稱伺服器,請確定該子網域的名稱伺服器 (NS) 和授權開始 (SOA) 記錄已正確設定。您可以使用類似上述範例的命令來檢查這些記錄。

如需有關的詳細資訊DNS,請參閱 Amazon Route 53 說明文件中的網域名稱系統 (DNS) 概念

Application Load Balancer 原點 502 錯

如果您使用應用程式負載平衡器做為來源並收到 502 錯誤,請參閱如何疑難排解 Application Load Balancer HTTP 502 錯誤?

API閘道原點 502 錯誤

如果您使用API閘道並收到 502 錯誤訊息,請參閱如何解決來自RESTAPIs具有 Lambda 代理整合的API閘道的 HTTP 502 錯誤?