如果 Varnish 設定為我的 NGINX 後端前面的預設緩存,我如何在 NGINX 後端中檢查客戶端的原始 IP 並據此做出決定?
我想只允許某個目錄存取某些IP。 Varnish 位於 NGINX 前面,表示每個請求都來自127.0.0.1
.我正在考慮設定一些自訂 HTTP 標頭,但如何結合location ~ /folder/ {}
部分進行檢查?
答案1
預設情況下 Varnish 4 會設置X-Forwarded-For 標頭作為客戶端的真實 IP,但 NGINX 會忽略它,除非你明確設定它。
將這些行新增至伺服器區塊中的 nginx 設定中,該設定使用ngx_http_realip_模組:
server {
listen 80;
set_real_ip_from 127.0.0.1;
real_ip_header X-Forwarded-For;
<Other Server Options>
}
如果您使用 Ubuntu,則預設情況下該模組已啟用。但是,對於某些 Linux 發行版,您可能必須手動啟用或安裝它。您可以透過以下方式檢查配置的模組:
nginx -V
更新配置後不要忘記重新載入 nginx:
sudo service nginx reload
一旦 nginx 能夠取得 Varnish 設定的客戶端真實 IP,您只需在位置區塊中放置允許和拒絕選項:
server {
<Server Options>
location ~ /folder/ {
allow <IP to whitelist>;
deny all;
<Location Options>
}
}