Cookieに secure
フラグ を設定していますが、HTTP経由で通信しているため、nginxはCookieの送信を拒否しています。
これは予想される動作であるため、完全に理解できます。ただし、nginxの前で、インターネットからのHTTPSトラフィックを受け入れ、HTTP経由で内部ネットワーク上のnginxと通信するClassic Load Balancer(以前はElastic Load Balancerと呼ばれていました)を実行します。
それで、接続全体が信頼されているので、Cookieを削除しないようにnginxに指示する方法はありますか?
まず、HTTP Cookieベースのセッションで「奇妙な」問題をデバッグするときは、適切なSet-Cookie
ヘッダーがサーバーから送信されているかどうかを確認してください。
notが送信されていないことを確認したら(私が行ったように)、環境変数DEBUG
を設定する必要があります。 NodeJS/expressアプリケーションを実行している場合は、*
に移動します。
これを行うと、ログに次の行が見つかる可能性があります。
cookie-sessionエラー保存セッション暗号化されていない接続を介して安全なcookieを送信できません
次に、その行を cookie-session まで追跡し、さらに cookies まで追跡します。これはすべて、接続を信頼できるものとして扱わないExpressに関係していることに気付いたときです。
したがって、nginxはCookieを削除しません。ある意味では、それは責任があるのです。 ロードバランサーの背後にあるnginx $ schema変数 で答えを見つけました。受け入れられた答えを引用するには:
# Sets a $real_scheme variable whose value is the scheme passed by the load
# balancer in X-Forwarded-Proto (if any), defaulting to $scheme.
# Similar to how the HttpRealIp module treats X-Forwarded-For.
map $http_x_forwarded_proto $real_scheme {
default $http_x_forwarded_proto;
'' $scheme;
}
それをnginx構成に入れてから、$real_scheme
ヘッダーに$scheme
の代わりにX-Forwarded-Proto
を使用します。
proxy_set_header "X-Forwarded-Proto" $real_scheme;
デフォルトでは、nginxはsecure
フラグに関連する処理を行いません。