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