AWS ALB设置Cache-Control私有max-age标头

时间:2017-07-05 09:05:42

标签: symfony amazon-web-services caching load-balancing

我有一个Symfony 3应用程序部署在AWS Beanstalk实例上,因为我使用HTTP / 2,所以在应用程序负载均衡器后面有一个EC2实例。

我发现负载均衡器存在一个奇怪的问题。我知道它不应该设置任何缓存标头,但由于某种原因它确实存在。在我的测试机器上,使用相同的代码,我将此标头与响应:

cache-control:private

但是在AWS服务器上会发送此标头:

cache-control:private, max-age=86400

这打破了我的应用程序,因为我不希望客户端的浏览器缓存响应,因为我的应用程序只能由登录用户访问。我找到修复此问题的唯一方法是调用此函数在将响应发送回客户端之前我的app.php文件:

$response->headers->removeCacheControlDirective('private');

这会将no-cache指令添加到cache-control标头,这会阻止浏览器缓存响应,但我不确定这是否是正确的方法,因为AWS应用程序仍然发送{{1我不确定max-age指令会覆盖所有浏览器中的其他指令。

修复后,这是我从服务器获得的内容:

no-cache

这来自AWS:

cache-control:no-cache, private

TL / DR:那么,我要问的是,有没有办法从AWS服务器发送的内容中删除cache-control:no-cache, private, max-age=86400 指令?

谢谢,我使用了StackOverflow多年,但这是我第一次提出问题,因为我在任何地方都没有找到答案。

1 个答案:

答案 0 :(得分:0)

所以我终于找到了答案,结果发现它与AWS无关...... 原因是在我的.htaccess文件中我有一个mod_expires指令,上面有这一行:

ExpiresByType text/html "access plus 1 days"

将缓存标题添加到所有html页面......由于某种原因,我在Linux或Windows上的Apache都没有启用mod_expires,但AWS的Web服务器没有...