web-dev-qa-db-ja.com

nginxが安全なCookieを削除しないようにするにはどうすればよいですか?

Cookieに secureフラグ を設定していますが、HTTP経由で通信しているため、nginxはCookieの送信を拒否しています。

これは予想される動作であるため、完全に理解できます。ただし、nginxの前で、インターネットからのHTTPSトラフィックを受け入れ、HTTP経由で内部ネットワーク上のnginxと通信するClassic Load Balancer(以前はElastic Load Balancerと呼ばれていました)を実行します。

それで、接続全体が信頼されているので、Cookieを削除しないようにnginxに指示する方法はありますか?

3
Der Hochstapler

まず、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;
2
Der Hochstapler

デフォルトでは、nginxはsecureフラグに関連する処理を行いません。

1
VBart