Назад | Перейти на главную страницу

Разрешить размещение в NGINX на основе IP - запрос исходит от Varnish

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