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>
}
}