Dot-Htaccess

即將推出帶有 Varnish 的頁面:排除 IP 重定向

  • August 13, 2019

我嘗試使用 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>

這在沒有啟動清漆記憶體的情況下完美執行。使用清漆記憶體,所有人(包括我)都被重定向到我即將推出的頁面。

我試圖設置我的清漆記憶體.vcl文件來做同樣的事情,但我有一個錯誤(有我的 IP 和沒有),有一個空白的清漆記憶體頁面和我的 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"));
   }
}

這是正確的方法嗎?

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 都附加在末尾。

引用自:https://serverfault.com/questions/979058