我正在尝试使用HTTPS在WP站点中使用Varnish和Nginx。
缓存文件一切正常,但是当Varnish发现不应该缓存的东西时,它会将其发送回Nginx。此时,Nginx再次向Varnish发送HTTPS请求,导致无限循环。
我尝试了很多东西,在互联网上搜索了很多,但到目前为止没有任何效果。
这是 Varnish 发回的一个例子:
if (req.url ~ "/wp-(login|admin|cron)") {
# Don't cache, pass to backend
return (pass);
}
这是处理433的Nginx位置块:
location / {
# Send request to varnish
proxy_pass http://127.0.0.1:8888;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header Host $host;
}
我猜 Varnish 正在将数据return(pass)
发送回 Nginx,但我现在不知道如何使用另一个位置块渲染该数据。
如何在 Nginx 中捕获来自 Varnish 的请求并将其与来自常规 433 端口的请求区分开来?
提前感谢!
我发现了问题:HHVM。
我在 Nginx(端口 9433)上创建了另一个没有 HHVM 的后端,并在 Varnish 中执行以下操作:
backend no_hhvm {
.host = "127.0.0.1";
.port = "9433";
}
然后。。。
# Either the admin pages or the login
if (req.url ~ "/wp-(login|admin|cron)") {
# Don't cache, pass to backend
set req.backend = no_hhvm;
return (pass);
}
因此,当页面未缓存时,它会转到不使用 HHVM 的端口 9433。
现在工作得很好。
这可能是由于 hhvm 期望通过端口 443(https) 发出请求,从而导致重定向到 https,最终再次出现在清漆中。
尝试添加:
fastcgi_param HTTPS on;
到位置块,fastcgi_pass 到 PHP。我在这里遇到了这个确切的问题:https://serverfault.com/questions/670620/nginx-varnish-hhvm/670857