在 Nginx 上设置“Expires”和“Cache-Control”标头

cod*_*ode 3 nginx

我有一个在 DigitalOcean droplet(nginx 服务器)上运行的 php 网站,我也使用 Cloudflare。最近,我的网站被一些我还不明白的东西击中了……因为我的 CPU 使用率通常是 1-2%,并且在几个小时内达到 100%,导致我的服务器崩溃。

我的 Cloudflare 分析显示访问者数量非常多 - 我确定其中不是人流量。

Cloudflare 要求查看我的 nginx 错误日志和访问日志。以下是他们的回复——

您有 2 个缓存标头,一旦它们存储在我们的边缘,它们就会使您的资产过期。

< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Run Code Online (Sandbox Code Playgroud)

< Expires:> Thu, 19 Nov 1981 08:52:00 GMT. 
Run Code Online (Sandbox Code Playgroud)

因为 Expires 标头设置为过去的某个时间,缓存将在它到达我们的边缘时过期。然后您的缓存控制标头基本上是说不要在我们的边缘存储任何资产,但是您启用了缓存,因此我们的边缘将继续抓取您的网站。这可能会导致对您的源的 DoS 攻击。

有人可以告诉我如何在我的 Nginx 服务器上设置我的 Expires 标头和 Cache-control 标头吗?

感谢您的回复,谢谢!

Mic*_*ton 6

您的php.ini文件中设置不正确:

session.cache_limiternocache在默认php.ini文件中设置为,需要更改。

session.cache_limiter应该定义和设置,要么public插入公共缓存控制标头,要么设为''(空白),不插入任何缓存控制标头,然后将使用应用程序发送的标头(如果有)。