wedevelopnl / silverstripe-fpc-purge
FPC 清除模块
Requires
- php: >=7.4
- silverstripe/cms: ^4.6.0@stable
Requires (Dev)
This package is auto-updated.
Last update: 2024-08-30 01:23:45 UTC
README
本模块为网站添加了一些缓存清除功能,以支持nginx或apache中的FPC。
需求
- 查看
composer.json
需求 - 带有Lua模块的nginx
安装
composer require wedevelopnl/silverstripe-fpc-purge
配置nginx
安装ngx_cache_purge的最新版本。
然后更新您的服务器配置
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=fastcgicache:100m max_size=5g inactive=60m use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
server {
location = /purge-cache {
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_cache fastcgicache;
fastcgi_cache_purge PURGE purge_all from 127.0.0.1;
cache_purge_response_type text;
}
location /index.php {
fastcgi_buffer_size 32k;
fastcgi_busy_buffers_size 64k;
fastcgi_buffers 4 32k;
fastcgi_keep_conn on;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
# fastcgi caching
fastcgi_cache fastcgicache;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
fastcgi_cache_min_uses 1;
fastcgi_cache_lock on;
fastcgi_no_cache $cookie_PHPSESSID;
fastcgi_cache_bypass $cookie_PHPSESSID;
fastcgi_ignore_headers Set-Cookie;
add_header X-Cache $upstream_cache_status;
}
# ...
}
注意:请考虑随机化或以其他方式保护您的URL,以防止滥用。
配置模块
--- Name: 'fpc-purge-config' Only: environment: 'live' --- WeDevelop\FPCPurge\FPCPurgeConfig: enabled: true endpoints: # Purging locally over HTTP - host: localhost:80 method: PURGE path: /purge-cache # Purging locally over HTTPS - host: tls://localhost:443 http_host: example.com # Required to tell nginx or apache what virtual host you want to connect to method: PURGE path: /purge-cache # Purging externally over HTTPS - host: tls://example.com:443 method: PURGE path: /purge-cache # Purging a specific server (useful when load balancing and purging all servers) - host: tls://10.0.0.5:443 http_host: example.com # Required to tell nginx or apache what virtual host you want to connect to method: PURGE path: /purge-cache Page: extensions: - WeDevelop\FPCPurge\Extensions\FPCPurgeExtension
在此处,您可以启用模块并配置用于清除的端点。
您可以通过进入SilverStripe管理界面,然后在侧边栏中单击FPC清除并单击清除缓存按钮来测试此配置。它应该告诉您是否成功。
我们还向页面添加了一个扩展,在发布页面后清除缓存。
注意:发布后的清除操作将打开一个连接,然后发送一个非阻塞请求,对发布性能的影响取决于端点,应该很小或几乎没有影响。
如果您使用dnadesign/silverstripe-elemental,别忘了在BaseElement上也应用此扩展,以确保在发布元素后清除缓存。
DNADesign\Elemental\Models\BaseElement: extensions: - WeDevelop\FPCPurge\Extensions\FPCPurgeExtension
设置缓存控制
以上所有设置都不会缓存任何内容,直到您设置缓存控制。您可以遵循官方SilverStripe文档,或使用此模块中包含的扩展以实现更简单、更可靠的实现。
PageController: extensions: - WeDevelop\FPCPurge\Extensions\FPCPurgeControllerExtension
现在您必须向您的PageController添加一个updateCacheControl()
方法并配置CacheControl头部。
public function updateCacheControl(): void { HTTPCacheControlMiddleware::singleton() ->enableCache() ->setSharedMaxAge(3600) ->setMaxAge(60); }
共享最大年龄:此页面允许在您的FPC(nginx、apache等)中缓存的秒数
最大年龄:此页面允许在浏览器中缓存的秒数
如果您有扩展PageController的其他控制器,例如从API获取更多动态数据,您可以通过重写updateCacheControl方法在该控制器中重写CacheControl头部。
public function updateCacheControl(): void { HTTPCacheControlMiddleware::singleton() ->enableCache() ->setSharedMaxAge(600) ->setMaxAge(0); }
在此,我们将最大年龄设置为0,以防止它被浏览器缓存,并且共享最大年龄相对较低。这样,缓存只能过时10分钟。
会话和CSRF令牌
在会话上下文中生成页面时,例如登录用户或CSRF令牌,不要缓存页面。幸运的是,有两样东西可以保护我们免犯这个错误。
- SilverStripe会在会话活动时覆盖我们的缓存控制头部。
- nginx配置在发现PHPSESSID时触发绕过。
默认配置
WeDevelop\FPCPurge\FPCPurgeConfig: enabled: false endpoints: []
许可证
查看许可证
维护者
开发和贡献
欢迎pull requests。对于重大更改,请首先打开一个问题以讨论您想更改的内容。有关更多信息,请参阅我们的贡献文档。
开始使用
我们建议使用 Docker 及 Docker Compose 进行开发。
我们还包含了一个 Makefile 以简化一些命令。
我们的开发容器包含一些内置工具,例如 PHPCSFixer
。
启动开发容器
使用 make build
构建Docker容器,然后分离运行。
如果您只想启动容器,可以直接输入 make up
。
您可以使用 make sh
通过SSH进入容器。
所有make命令
您可以通过运行 make help
来获取所有可用 make
命令的列表。