web-dev-qa-db-ja.com

Nginx fastcgi_cache hideSet-キャッシュから提供するときのCookie

Nginx fastcgi_cacheを使用してサイトの一部のページを提供しようとしていますが、正常に機能しましたが、応答にSet-Cookieがキャッシュされているため、セッションがすべてのユーザーに複製されていることがわかりました。

私はいくつかの解決策を試しましたが、それらのページでCookieを無効にしたくはありません。キャッシュから提供するときに、Cookieを無視するだけです。これを行う方法はありますか?ニスへの移行を検討しましたが、同じサーバーに複数のサイトがあり、回避したいと思います。

私も試しました this ですが、成功しません

fastcgi_cache_path /etc/nginx/cache/iteramos levels=1:2 keys_zone=ITERAMOS:120m inactive=60m;
fastcgi_cache_key "$scheme$request_method$Host$request_uri";

set $supercache_uri $request_uri;
set $no_cache 1;

#set no cache to 0 (do cache) if we are in listing pages
if ($supercache_uri ~ ^/(preguntas|etiquetada|etiquetas)$) {
    set $no_cache 0;
    set $supercache_uri '';
}
if ($supercache_uri = /) {
    set $no_cache 0;
    set $supercache_uri '';
}

if ($supercache_uri ~ ^/?page= ) {
    set $no_cache 0;
    set $supercache_uri '';
}

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_ignore_headers "Cache-Control" "Expires" "Set-Cookie";
    fastcgi_cache ITERAMOS;
    fastcgi_cache_valid 200 60m;
    #this header adds a hit / bypass / miss header
    fastcgi_cache_use_stale error timeout;
    add_header X-Cache $upstream_cache_status;
    fastcgi_cache_bypass $no_cache;
    fastcgi_no_cache $no_cache;
}

前もって感謝します

3
SkarXa

fastcgi_hide_headerを使用してみてください:

fastcgi_hide_header "Set-Cookie";

これにより、リクエストがキャッシュにヒットしたときにすべてのCookieが非表示になります。 公式ドキュメント

1
Michael

次のソリューションは、応答がバックエンドからのものである場合は目的のヘッダーを送信し、応答がキャッシュからのものである場合はそれを非表示にします。示されている例では、キャッシュされた応答からすべてのCookieを非表示にします。

Luaモジュールが必要になります。 Debian10にapt-get install libnginx-mod-http-luaをインストールしました。

map $upstream_bytes_received $hide_cookie {
   default '';
   '' Set-Cookie;
}

内部の場所:

header_filter_by_lua_block {
   ngx.header[ngx.var.hide_cookie] = nil;
}

詳細な説明、Luaを使用しないその他のオプション、および(変数を使用するために)Luaが必要な理由の説明: https://stackoverflow.com/a/59383747/4932239

0
Vixxs