允許基於 IP 在 NGINX 中定位 - 請求來自 Varnish

允許基於 IP 在 NGINX 中定位 - 請求來自 Varnish

如果 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>
    }
}

相關內容