Nginx-fast cgi缓存导致管理员栏消失

时间:2019-06-30 作者:Moshe

我对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;`
}
希望你能帮助我。

谢谢:)

1 个回复
最合适的回答,由SO网友:4oo4 整理而成

您需要的是设置一个变量来确定用户是否已登录(以及其他不需要缓存的情况),然后将该变量传递给fastcgi_cache_bypassfastcgi_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/

这样做对我来说很有效,但如果您遵循完整的指南并设置条件清除,可能会得到最好的结果。