我使用自訂網域設定了 Amazon CloudFront 發行項目。我想要對在使用 CloudFront 請求備用正規名稱 (CNAME) 網域時,收到的 502 "The request could not be satisfied" 錯誤進行疑難排解。
解決方法
CloudFront 無法解析來源 IP 位址
如果 CloudFront 無法解析來源網域,則會傳回 "The request could not be satisfied" 錯誤。除非您的發行項目僅使用 Amazon Virtual Private Cloud (Amazon VPC) 作為來源,否則 CloudFront 必須能夠透過公有 DNS 查詢解析您的來源網域。
您不需要讓來源可公開存取,但您必須能夠公開查詢其網域。若要解決此問題,請使用 dig 或 nslookup 命令,以確定來源網域是否解析為 IP 位址。
如果您使用的是 Linux,請執行以下命令:
dig ORIGIN_DOMAIN_NAME
如果您使用的是 Windows,請執行以下命令:
nslookup ORIGIN_DOMAIN_NAME
**注意:**將 ORIGIN_DOMAIN_NAME 替換為您的來源網域名稱。
該命令會傳回來源網域名稱的 IP 位址。使用 DNS 檢查工具檢查不同地理位置的 DNS 解析。例如,您可以使用 DNS 檢查工具網站上的檢查 DNS 傳播工具。檢查驗證方法是否無法查詢您的來源網域。然後,聯絡您的公有 DNS 供應商,確認來源網域是否存在可公開解析的 DNS 記錄。
如需 DNS 疑難排解的詳細資訊,請參閱DNS 如何運作,以及如何對部分或間歇性 DNS 故障進行疑難排解?
SSL/TLS 憑證與網域名稱不相符
來源端的 SSL/TLS 憑證必須包含以下其中一個網域名稱:
- 憑證的 Common Name (通用名稱) 欄位或 Subject Alternative Names (主體備用名稱) 欄位中的來源網域名稱。
- 主機標頭的網域名稱,用於 CloudFront 發行項目中轉發請求至來源時,所使用的傳入檢視器主機標頭。
若要檢查憑證中的通用名稱和主體備用名稱,請執行下列命令:
openssl s_client -connect DOMAIN:443 -servername SERVER_DOMAIN | openssl x509 -text | grep -E '(CN|Alternative)' -A 2
**注意:**將 DOMAIN 替換為來源網網域名稱,並將 SERVER_DOMAIN 替換為來源網域名稱。如果請求將檢視器的主機標頭轉送到來源,則將 SERVER_DOMAIN 替換為傳入的主機標頭值。
在下列情況下,您必須設定快取政策或來源請求政策,以包含主機標頭:
- 來源憑證包含檢視器主機標頭值作為 SSL/TLS 憑證的通用名稱或主題備用名稱 (SAN)。
- 請求不會將主機標頭轉送到來源。
來源憑證已過期、不受信任、自我簽署或憑證鏈順序錯誤
受信任的憑證認證機構 (CA) 必須簽署您在自訂來源上安裝的憑證。如需受信任 CA 的清單,請參閱 Mozilla 網站上的憑證認證機構。CloudFront 不支援使用自我簽署 SSL/TLS 憑證的來源。
若要檢查您的來源憑證是否已過期,請執行以下 OpenSSL 命令:
openssl s_client -connect DOMAIN:443 -servername SERVER_DOMAIN | openssl x509 -text | grep Validity -A 3
**注意:**將 DOMAIN 替換為來源網網域名稱,並將 SERVER_DOMAIN 替換為來源網域名稱。如果請求將檢視器的主機標頭轉送到來源,則將 SERVER_DOMAIN 替換為傳入的主機標頭值。
在命令的輸出中,找到 Not Before 和 Not After 參數。確認目前日期和時間在憑證的有效期限內。
缺少中繼 CA 憑證或中繼憑證的順序不正確會導致 HTTPS 和來源之間的通訊失敗。
若要檢查憑證鏈,請執行以下命令:
openssl s_client -showcerts -connect DOMAIN:443 -servername SERVER_DOMAIN
**注意:**將 DOMAIN 替換為來源網網域名稱,並將 SERVER_DOMAIN 替換為來源網域名稱。如果請求將檢視器的主機標頭轉送到來源,則將 SERVER_DOMAIN 替換為傳入的主機標頭值。
如需詳細資訊,請參閱將 SSL/TLS 憑證與 CloudFront 結合使用的要求。
CloudFront 不支援來源的加密套件
當沒有通用的協商加密套件時,CloudFront 和來源之間的 SSL/TLS 交易將會失敗。若要解決此問題,您必須使用支援的通訊協定和加密套件。
使用 SSL 伺服器測試工具檢查支援的加密套件清單是否包含您的來源的加密套件。例如,您可以使用 Qualys 網站上的 SSL 伺服器測試。
存在上游來源問題
您可以使用連線到來源的 Proxy 內容交付網路 (CDN) 主機名稱或負載平衡器,作為 CloudFront 發行項目中的自訂來源。如果其中一個中繼服務無法連線到來源,那麼您會收到 502 錯誤。若要解決此問題,請與您的來源服務提供者合作。
如果您使用 Application Load Balancer 作為來源,請參閱如何對 Application Load Balancer HTTP 502 錯誤進行疑難排解?
如果您使用 Amazon API Gateway,請參閱如何使用 Lambda Proxy 整合解決 API Gateway REST API 的 HTTP 502 錯誤?
與 CloudFront 發行項目關聯的 Lambda@Edge 函式驗證失敗
如果 Lambda@Edge 函式向 CloudFront 傳回無效的回應,則 CloudFront 將傳回 502 錯誤。若要解決此問題,請檢查您的 Lambda@Edge 函式是否有下列問題:
- 傳回 JSON 物件。
- 缺少必填欄位。
- 回應中的物件無效。
- 不允許新增或更新。
- 標題是唯讀的。
- 您超出了主體大小上限。
- 字元或值無效。
若要解決這些問題,請參閱測試和偵錯 Lambda@Edge 函式。另請參閱如何對 CloudFront 中,由 Lambda@Edge 函式引起的 502 和 503 錯誤進行疑難排解?