HTTP 502 狀態碼 (無效的閘道) - Amazon CloudFront

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

HTTP 502 狀態碼 (無效的閘道)

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

CloudFront 和自訂原始伺服器之間的 SSL/TLS 交涉失敗

如果您使用自訂來源,且設定 CloudFront 為在 CloudFront 與原始伺服器之間需要 HTTPS,則問題可能是網域名稱不相符。在原始伺服器上安裝的 SSL/TLS 憑證在 Common Name (通用名稱) 欄位包括網域名稱,且在 Subject Alternative Names (主體別名) 欄位中可能還有更多。(在憑證網域名稱中CloudFront 支援萬用字元。) 憑證中的其中一個網域名稱必須符合一或兩個下列的值:

  • 您為 Origin Domain Name (原始網域名稱) 指定的值,適用於您分佈中的可用來源。

  • Host標頭的值,如果您配置 CloudFront 為將Host標頭轉發到您的來源。如需有關轉發 Host 標頭到原始伺服器的詳細資訊,請參閱根據請求標頭快取內容

如果網域名稱不相符,SSL/TLS 交涉就會失敗,並 CloudFront 傳回 HTTP 狀態碼 502 (錯誤的閘道),並將X-Cache標頭設定為。Error from cloudfront

若要判斷憑證中的網域名稱是否與分佈或 Host 標頭中的 Origin Domain Name (原始伺服器網域名稱) 相符,您可以使用線上 SSL 檢查或 OpenSSL。如果網域名稱不相符,您有兩個選項:

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

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

  • 變更發佈組態,以便 CloudFront 不再嘗試使用 SSL 與原始伺服器連線。

線上 SSL 檢查

若要尋找 SSL 測試工具,請搜尋網際網路「線上 ssl 檢查。」 通常需要指定網域名稱,且此工具會傳回有關 SSL/TLS 憑證的各種資訊。確認憑證在 Common Name (通用名稱)Subject Alternative Names (主體別名) 欄位中包含您的網域名稱。

OpenSSL

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

使用下列 OpenSSL 命令來測試與原始伺服器的連線 (將原始網域名稱取代為原始伺服器的網域名稱,例如 example.com):

openssl s_client -connect origin domain name:443

如果下列為真:

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

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

然後將 -servername 選項新增至 OpenSSL 命令,如下列範例所示 (將 CNAME 取代為您的分佈中設定的 CNAME):

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

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

CloudFront 使用密碼和通訊協定連線到原始伺服器。如需 CloudFront 支援的密碼和通訊協定清單,請參閱。與來源之間支援的通訊協定 CloudFront 和密碼如果您的來源沒有回應 SSL/TLS 交換中的這些密碼或通訊協定之一, CloudFront 則無法連線。您可以使用如 SSL Labs (SSL 實驗室) 等線上工具來驗證原始伺服器是否支援密碼加密和通訊協定。在 Hostname (主機名稱) 欄位中輸入原始伺服器的網域名稱,然後選擇 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 發行版上建立來源時,您可以針對 HTTP 和 HTTPS 流量設定 CloudFront連接至原始伺服器的連接埠。根據預設,這些都是 TCP 80/443。您可以選擇修改這些連接埠。如果您的來源因為任何原因拒絕這些連接埠上的流量,或者您的後端伺服器在連接埠上沒有回應, CloudFront 將無法連線。

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