我有一个运行在DigitalOcean雾滴(nginx服务器)上的php网站,我也使用Cloudflare。 最近,我的网站遭到了一些我还不明白的东西,因为我的CPU使用率通常是1-2%,几个小时后又达到100%,导致服务器崩溃。
我的Cloudflare分析显示访问者人数非常多 – 其中我肯定不是人stream量。
Cloudflare要求查看我的nginx错误日志和访问日志。 以下是他们的回覆 –
您有2个caching标题,只要它们存储在我们的边缘,它们就会过期。
< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
和
< Expires:> Thu, 19 Nov 1981 08:52:00 GMT.
由于Expires头部设置为过去的某个时间,因此caching将在到达我们的边缘的时候过期。 那么你有你的caching控制头基本上说不存储任何资产在我们的边缘,但你有一个caching启用,所以我们的优势将继续抓取您的网站。 这可能会导致对您的来源的DoS攻击。
有人可以告诉我如何设置我的Nginx服务器上的过期头和caching控制头?
感谢您的回复,谢谢!
你的php.ini文件中有一个不正确的设置:
session.cache_limiter值在默认的php.ini文件中设置为nocache ,需要修改。
session.cache_limiter应该被定义和设置,或者public哪些插入公共caching控制头,或者是没有插入任何caching控制头'' (空白)”,然后你的应用程序发送的头将被使用,如果有的话。
我发现使用Wordpress(一些主题)和其他PHP应用程序有时几乎不可能使用PHP正确设置标题。 我的解决scheme是我只是忽略应用程序设置的头,并用我想要的Nginx来覆盖它们。 我觉得这更简单,更快,更可靠。
如果你可以从你的应用程序和PHP中解决这个问题,那么这个方法给你很多控制,而且很简单。 使用所需的模块构buildnginx比您想象的要容易,根据下面链接的指南,大概可以在30分钟内完成。
我有一个指导如何设置Nginx和Cloudflare。
短版本的caching标题:
对于图像在你的位置使用这样的东西 – 你需要头 – 更多的模块编译到Nginx。 请参阅我的教程的第1部分。
add_header Cache-Control "public, max-age=691200, s-maxage=691200"; more_clear_headers Server; more_clear_headers "Pragma"; more_clear_headers "Expires";
对于不在CloudFlare上caching的页面,我使用的是我的教程中的nginx fast_cgi页面caching。
对于CloudFlare,如果您需要任何棘手的问题,您可能需要使用页面规则,但通常情况下,默认设置将caching图像,而不是页面。