使用 Varnish 制作“即将上线”页面:排除 IP 重定向

使用 Varnish 制作“即将上线”页面:排除 IP 重定向

我尝试使用 Magento 2 安装 Varnish Cache。它似乎工作正常(虽然我仍然有一个无缓存需要查找和删除......)但我的.htaccess“即将推出”页面的重定向不再起作用。

我有标准.htaccess代码来将其他用户(我除外)重定向到我的即将推出的页面:

 # MAINTENANCE-PAGE REDIRECT
<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteCond %{REMOTE_ADDR} !^xx\.xxx\.xxx\.xxx
 RewriteCond %{REMOTE_ADDR} !^xx\.xxx\.xxx\.xxx
 RewriteCond %{REMOTE_ADDR} !^xx\.xxx\.xxx\.xx
 RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx
# RewriteCond %{REQUEST_URI} !coming/soon.html$ [NC]
 RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif|css|js|svg|eot|woff|woff2|php) [NC]
 RewriteCond %{REQUEST_URI} !^/coming/soon\.html$
RewriteRule ^(.*)$ https://example.com/coming/soon.html [R=302,L]
</IfModule>

无需激活 Varnish Cache,此操作即可完美运行。启用 Varnish Cache 后,所有人(包括我)都会重定向到我的即将推出页面。

我尝试设置我的 varnish 缓存.vcl文件来做同样的事情,但是我遇到了错误(有我的 IP 和没有 IP 的情况下),varnish 缓存页面为空白,并且我的 URL 出现错误 302 代码https://www.example.com/coming/soon.html

acl nosip {
    "xx.xxx.xxx.xxx";
    "xx.xxx.xx.xxx";
    "xx.xxx.xxx.xx";
    "xxx.xxx.xxx.xxx";
}


sub vcl_recv {

    # Methode ip exclusion 
    if (client.ip !~ nosip) {
    return (synth(302, "https://www.example.com/coming/soon.html"));
    }
}

这是正确的做法吗?

答案1

Varnish 实现为反向代理在您的应用程序服务器前面,因此 REMOTE_ADDR服务器变量(当它到达您的应用程序服务器时)很可能是该代理服务器的 IP 地址,而不是客户端的原始 IP。

假设 Varnish 设置了适当的X-Forwarded-....请求标头,那么您可能需要检查X-Forwarded-ForHTTP 请求标头。例如:

RewriteCond %{HTTP:X-Forwarded-For} !^xx\.xxx\.xxx\.xxx

请注意,X-Forwarded-For标头可能是以逗号分隔的 IP 地址字符串。经过的每个代理服务器的 IP 都附加在末尾。

相关内容