使用Varnish + Nginx(HTTPS)时的重定向循环



我正在尝试使用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

最新更新