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