O valor de client.ip
é 127.0.0.1
porque nginx
é o cliente. Não faria sentido que o Varnish mascare esse valor - mesmo em situações como a sua em que o Verniz está sentado atrás de um proxy de front-end, muitas vezes você deseja basear as decisões no endereço IP da coisa que realmente faz a conexão com o Varnish.
O que você realmente quer fazer é ter nginx
colocando o endereço IP do cliente remoto em um cabeçalho dedicado (que você já está fazendo com X-Real-IP
) e usá-lo para tomar decisões de conexão. Fazemos exatamente isso em nosso ambiente em que o Apache fornece conectividade SSL na frente de varnish
e, em seguida, usamos esse cabeçalho para tomar decisões de acesso.
Não é tão bom quanto usar client.ip
(você não pode igualar usando acl
s), mas funciona. Nós fazemos algo assim:
if (! (
req.http.X-Real-IP ~ "^10\." ||
req.http.X-Real-IP ~ "^100\.100\." ||
req.http.X-Real-IP ~ "^200\.200\."
)) {
error 403 "Forbidden";
}
O Varnish não fornece um mecanismo nativo para substituir client.ip
por um cabeçalho personalizado, mas é possível resolver o problema de qualquer forma porque você pode inserir código C arbitrário em sua configuração.
Aqui é um exemplo que é exatamente paralelo ao seu situação que inclui um exemplo de substituição de client.ip
por outro valor para que possa ser usado em ACLs de Varnish.