如何排除 AWS CDN 上缓存的 cookie?

问题描述 投票:0回答:1

我最近在 AWS CDN 上配置了我的 Laravel 网站,但遇到了一些问题。我是新来的,请帮忙..

我的 Laravel 网站使用以下 cookie 来识别会话。 csrf_cookie_name、ci_session 和 site_lang

因此,我在行为设置下的自定义 cookie 规则中添加了这些 cookie 和标头,如下所示:

现在,除了仪表板登录后的一些功能外,整个网站看起来都很好。我发现最近的更改没有反映出来,购物车商品编号没有更新,最近的交易没有显示,任何实时聊天消息都没有出现以及一些类似的问题。在我注销并重新登录后,我可以看到所有更新,然后又没有反映新的更改。

我怀疑这可能是由于会话 ID 或会话 cookie 的缓存而发生的。如果是这种情况,请您帮忙告诉我。

此外,仅转发上述 cookie 而不缓存到查看者/用户的过程。

当我遇到这个问题时,每次我使缓存无效/清除缓存时,所有新更新都会反映在仪表板上,但除非我重新登录或清除所有缓存,否则它会再次停止反映新更改。

要清除所有缓存,我使用 /*

创建失效

请检查我当前行为设置的屏幕截图。

session-cookies cdn aws-cdn
1个回答
0
投票

您正在缓存对动态内容的请求(例如实时聊天)。
当您将会话 ID 添加到缓存键 (ci_session) 时,您将缓存每个用户会话的这些请求。
因此,当您再次登录时,您会得到一个新的会话 ID,第一个请求是缓存未命中并获取新内容,而不是下一个请求。

您只有一种与所有流量 (*) 相关的行为,静态和动态。 此行为配置为缓存请求并向缓存键添加许多标头和 cookie。

您需要区分对静态和动态内容的请求。

您有 2 个选择。

1/ 使用不同的路径。
一种用于静态内容(例如 http://mywebsite/static)。
一种用于动态内容(例如 http://mywebsite/api)。
然后为每条路径创建不同的行为。
缓存第一个的所有内容,使用标准缓存策略。
不为第二个缓存任何内容。

2/ 使用不同的域。
您将静态内容推送到 S3 存储桶。
您在此存储桶之上创建一个 CloudFront 分配并缓存所有内容,您将获得类似 http://12345.cloudfront.net.
的 URL。 您配置您的应用程序,以便当您连接到 http://mywebsite 时,它会从 http://12345.cloudfront.net.
获取静态内容 我不熟悉 Laravel,但似乎该线程正在强调一个解决方案:Laravel 和 AWS Cloudfront

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.