我想知道我是否能得到一些帮助。我正在用Varnish运行VPS。这个VPS主要是WordPress,但也有一个Joomla网站运行。出于某种原因,我的Varnish配置文件决定它将恢复默认,所以我遇到了一系列问题,因为我很傻到不保存我的自定义配置文件!
这是我当前的配置文件:
# This is a basic VCL configuration file for varnish. See the vcl(7)
# man page for details on VCL syntax and semantics.
#
# Default backend definition. Set this to point to your content
# server.
#
backend default {
.host = "LIVE IP";
.port = "8080";
.max_connections = 800;
}
acl purge { "localhost"; "127.0.0.1"; }
sub vcl_recv {
set req.grace = 2m;
# Set X-Forwarded-For header for logging in nginx
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
# Remove has_js and CloudFlare/Google Analytics __* cookies and statcounter is_unique
set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(_[_a-z]+|has_js|is_unique)=[^;]*", "");
# Remove a ";" prefix, if present.
set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", "");
# Either the admin pages or the login
if (req.url ~ "/wp-(login|admin|cron)") {
# Don't cache, pass to backend
return (pass);
}
# Remove the wp-settings-1 cookie
set req.http.Cookie = regsuball(req.http.Cookie, "wp-settings-1=[^;]+(; )?", "");
# Remove the wp-settings-time-1 cookie
set req.http.Cookie = regsuball(req.http.Cookie,
"wp-settings-time-1=[^;]+(; )?", "");
# Remove the wp test cookie
set req.http.Cookie = regsuball(req.http.Cookie,
"wordpress_test_cookie=[^;]+(;)?", "");
# Static content unique to the theme can be cached (so no user uploaded images)
# The reason I don't take the wp-content/uploads is because of cache size on bigger blogs
# that would fill up with all those files getting pushed into cache
if (req.url ~ "wp-content/themes/" && req.url ~
"\.(css|js|png|gif|jp(e)?g)") {
unset req.http.cookie;
}
# Even if no cookies are present, I don't want my "uploads" to be cached due to their potential size
if (req.url ~ "/wp-content/uploads/") {
return (pass);
}
# any pages with captchas need to be excluded
if (req.url ~ "^/contact/" || req.url ~ "^/links/domains-for-sale/")
{
return(pass);
}
# Check the cookies for wordpress-specific items
if (req.http.Cookie ~ "wordpress_" || req.http.Cookie ~ "comment_") {
# A wordpress specific cookie has been set
return (pass);
}
# allow PURGE from localhost
if (req.request == "PURGE") {
if (!client.ip ~ purge) {
error 405 "Not allowed.";
}
return (lookup);
}
# Force lookup if the request is a no-cache request from the client
if (req.http.Cache-Control ~ "no-cache") {
return (pass);
}
# Try a cache-lookup
return (lookup);
}
sub vcl_fetch {
#set obj.grace = 5m;
set beresp.grace = 2m;
}
sub vcl_hit {
if (req.request == "PURGE") {
purge;
error 200 "Purged.";
}
}
sub vcl_miss {
if (req.request == "PURGE") {
purge;
error 200 "Purged.";
}
}
我遇到的问题是我的WP核心文件被移动到一个名为'core'的子文件夹,我将我的登录URL更改为/ administrator而不是wp-login.php。所以要登录,我会去domain.com/administrator或domain.com/core/administrator。如果我输入域名sans / core /,它将指向* / core / administrator。
Varnish的工作方式,它不允许我登录网站的WP-admin端,我认为是由于cookie。我在/ VCL配置文本中添加了/ administrator,但它似乎没有用。
是否有人能够帮助我解决这个问题,因为我宁愿不将所有安装恢复到wp-login.php。
我似乎也无法像之前那样登录SSH并清除缓存。老实说,我记不起以前的配置,但我确信我错过了一些东西,所以如果有人能够改进这个代码,使它尽可能地工作(或者我是否完全错过了重要的事情,特别是与Joomla)然后帮助将不胜感激。
我没有动态制作主题,但我确实有一些用户登录VPS上托管的各个网站来添加/更改帖子,因此正确地清除缓存会很棒,因为我开始拉头发出!
谢谢大家。
答案 0 :(得分:2)
要使PURGE正常工作,您可以尝试在“acl purge”部分添加VPS主机名。我知道我必须在我的VPS和Varnish v4上做到这一点。
对于wp admin部分,它根本不应该是缓存,所以请尝试更改此部分:
# Either the admin pages or the login
if (req.url ~ "/wp-(login|admin|cron)") {
# Don't cache, pass to backend
return (pass);
}
进入这个:
# Either the admin pages or the login
if (req.url ~ "/core/administrator" || req.url ~ "/administrator") {
# Don't cache, pass to backend
return (pass);
}