この記事はアピリッツの技術ブログ「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;
}