Разрешить определение местоположения в NGINX на основе IP-адреса — запрос поступает от Varnish

Разрешить определение местоположения в NGINX на основе IP-адреса — запрос поступает от Varnish

Если 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>
    }
}

Связанный контент