Permitir localização no NGINX com base em IP - a solicitação vem do Varnish

Permitir localização no NGINX com base em IP - a solicitação vem do Varnish

Se o Varnish estiver definido como o cache padrão na frente do meu back-end NGINX, como posso verificar no back-end NGINX o IP original do cliente e tomar uma decisão com base nisso?

Quero permitir um determinado diretório apenas para determinados IPs. O verniz estando na frente do NGINX significa que cada solicitação vem de 127.0.0.1. Estou pensando em definir algum cabeçalho HTTP personalizado, mas como posso verificar isso em conjunto com location ~ /folder/ {}a seção?

Responder1

Por padrão, o Varnish 4 definiriaCabeçalho X-Forwarded-Forcomo o IP real do cliente, mas o NGINX ignoraria isso, a menos que você o configurasse explicitamente.

Adicione essas linhas à configuração do nginx no bloco do servidor que faz uso dongx_http_realip_module:

server {
    listen 80;
    set_real_ip_from   127.0.0.1;
    real_ip_header     X-Forwarded-For;
    <Other Server Options>
}

Se você usa Ubuntu, o módulo já está habilitado por padrão. No entanto, para algumas distribuições Linux, pode ser necessário habilitá-lo ou instalá-lo manualmente. Você pode verificar os módulos configurados:

nginx -V

Não se esqueça de recarregar o nginx depois de atualizar a configuração:

sudo service nginx reload

Uma vez que o nginx é capaz de obter o IP real do cliente definido pelo Varnish, você só precisa colocar as opções de permissão e negação nos blocos de localização:

server {
    <Server Options>
    location ~ /folder/ {
        allow <IP to whitelist>;
        deny all;
        <Location Options>
    }
}

informação relacionada