その他
    ホーム 技術発信 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;
    }
    
    記事を共有