ホーム DoRuby nginx の proxy_pass の転送先が API Gateway の場合に `SSL_do_handshake() failed` と言われた
nginx の proxy_pass の転送先が API Gateway の場合に `SSL_do_handshake() failed` と言われた
 

nginx の proxy_pass の転送先が API Gateway の場合に `SSL_do_handshake() failed` と言われた

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

ローカル環境のnginxからAPI Gateway で用意したAPIのエンドポイントに proxy_pass 設定したときにハマった件

背景

  • ローカル環境に nginx を立てて、その nginx で特定の path (例えば /api/v1/xxx) に対して proxy_pass を設定して、API Gateway で作成したエンドポイントに対してアクセスを転送したい

現象

  • 該当 path にアクセスすると nginx から 502 Bad Gateway のエラーが返ってくる
  • nginx のエラーログを見ると SSL_do_handshake() failed というエラーが発生していた

原因

proxy_pass の対象となるエンドポイントが SNI を使用している場合発生するっぽい(API Gateway がデフォルトで用意するエンドポイントは SNI 使ってる)

参考: Nginx reverse proxy error:14077438:SSL SSL_do_handshake() failed – Stack Overflow

対処

以下のように proxy_ssl_server_name on の設定を追加してあげたらOK

location /api/ {
  proxy_pass https://xxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/Dev/api/;
  proxy_ssl_server_name on;
}
記事を共有

最近人気な記事