我对wordpress管理栏和nginx fastcgi配置有问题。当我启用fastcgi缓存时,一些页面上的管理栏就会消失,此外,登录时几乎没有其他问题。这似乎是合理的,因为这是缓存的工作方式,但我想以某种方式解决它,因为这种类型的缓存确实加快了站点加载。
这是我添加到nginx的配置。形态:
`# creates a FastCGI cache`
`fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=phpcache:100m max_size=10g inactive=60m use_temp_path=off;`
`# defines the key for cache lookup`
`fastcgi_cache_key "$scheme$request_method$host$request_uri";`
在启用的站点中:
location ~ \\.php$ {
`fastcgi_cache phpcache;`
`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;`
`add_header X-FastCGI-Cache $upstream_cache_status;`
}
希望你能帮助我。
谢谢:)
最合适的回答,由SO网友:4oo4 整理而成
您需要的是设置一个变量来确定用户是否已登录(以及其他不需要缓存的情况),然后将该变量传递给fastcgi_cache_bypass
和fastcgi_no_cache
:
所以在你的server{}
阻止你想要这样的东西:
set $skip_cache 0;
# POST requests and urls with a query string should always go to PHP
if ($request_method = POST) {
set $skip_cache 1;
}
if ($query_string != "") {
set $skip_cache 1;
}
# Don\'t cache uris containing the following segments
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
set $skip_cache 1;
}
# Don\'t use the cache for logged in users or recent commenters
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
set $skip_cache 1;
}
然后将这些添加到php中
location {}
在您还拥有
fastcgi_cache
设置:
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
有关更多信息,请参见此:
https://easyengine.io/wordpress-nginx/tutorials/single-site/fastcgi-cache-with-purging/这样做对我来说很有效,但如果您遵循完整的指南并设置条件清除,可能会得到最好的结果。