允许根据 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_module

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

相关内容