在Centos WebPanel中,我使用Nginx > Varnish > Apache,php。ERR_TOO_MANY_REDIRECTS只出现在Wordpress主页上,它会消失,然后回到我的网站上。这种期刊行为提供了线索,认为这是一个与缓存相关的问题。
Status 301 Moved Permanently
Server nginx/1.16.1
Date Mon, 24 Feb 2020 15:46:29 GMT
Content-Type text/html; charset=iso-8859-1
Content-Length 230
Connection keep-alive
Keep-Alive timeout=60
Location https://thinkbalm.com/
X-Varnish 98379 131369
Age 13
Via 1.1 varnish (Varnish/5.2)
X-Cache HIT from Backend将域的配置设置为Nginx > Apache,从而消除Varnish解决了问题,但随后我丢失了Varnish。因此,我进行了大量的搜索,问题似乎如下:
Varnish和SSL - HTTPS终止代理后的WordPress
不幸的是,Varnish不支持SSL。因此,我们需要终止SSL连接,并使用Varnish和您的WordPress站点使用简单的HTTP。
Varnish不仅不支持SSL,还不知道SSL终止,只使用主机名和请求的URL作为标识符。
我们触发了一个问题:强制HTTPS重定向到一个不知道初始请求协议的应用程序上,可能会导致浏览器中的ERR_TOO_MANY_REDIRECTS错误。
当页面的HTTP版本存储在缓存中时,就会发生这种情况。输出不过是一个301重定向到HTTPS版本。但是,因为Varnish和WordPress不知道SSL终止,所以您将在重定向循环中结束,直到浏览器抛出此错误为止。
我们怎样才能解决这个问题?
我尝试将其添加到wp-config文件中:
if($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'){
$_SERVER['HTTPS'] = 'on';
$_SERVER['SERVER_PORT'] = 443;
}我还尝试将其添加到.htaccess中:
SetEnvIf X-Forwarded-Proto "https" HTTPS=on
Header append Vary: X-Forwarded-Proto
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]所有这些都解决不了这种情况。
有什么想法吗?
发布于 2020-02-25 09:44:31
整个解决方案,我写了一篇博文,取决于X-Forwarded-Proto头的存在。
HTTPS环境变量就不能在Apache中设置。我最初的假设是,这个标题没有被正确设置。但有个简单的方法可以找出:
Please向我发送以下Varnish命令的输出:
varnishlog -g request -q "ReqUrl eq '/'"`我假设这发生在主页上,所以命令对主页上的请求进行筛选。
Please还确认是否存在影响缓存变化的自定义 sub vcl_hash <#>configuration。
https://serverfault.com/questions/1004457
复制相似问题