Если Varnish установлен в качестве кэша по умолчанию перед моим бэкэндом NGINX, как я могу проверить в бэкэнде NGINX исходный IP-адрес клиента и принять решение на его основе?
Я хочу разрешить определенный каталог только определенным IP-адресам. Varnish, находящийся перед NGINX, означает, что каждый запрос поступает из 127.0.0.1
. Я думаю о настройке какого-то пользовательского заголовка HTTP, но как я могу проверить это в сочетании с location ~ /folder/ {}
section?
решение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 сможет получить реальный IP-адрес клиента, установленный Varnish, вам просто нужно будет разместить параметры allow и deny в блоках location:
server {
<Server Options>
location ~ /folder/ {
allow <IP to whitelist>;
deny all;
<Location Options>
}
}