endereço IP do cliente para frente do verniz para backend

1

Eu configurei o verniz como um proxy para redirecionar a solicitação HTTP para os servidores de backend que executam o apache. Eu gostaria de ter os endereços IP dos clientes em meus logs do apache em vez do endereço IP do servidor verniz. Aqui está o meu arquivo de configuração do verniz:

backend $my_backend {
    .host = "192.168.0.103";
    .port = "80";
}
sub vcl_recv {
} else if (req.http.host == "$my_domain_name") {
    set req.backend = $my_backend;
    if (req.request == "POST") {
        if (req.http.X-Forwarded-For) {
          set req.http.X-Real-Forwarded-For = req.http.X-Forwarded-For ", " regsub(client.ip, ":.*", "");
          unset req.http.X-Forwarded-For;
       } else {
          # Simply use the client IP
          set req.http.X-Real-Forwarded-For = regsub(client.ip, ":.*", "");
       }
        return(pipe);
    }
    return(lookup);
}
}

No arquivo de configuração do apache de back-end, tenho isto

RPAFenable On
RPAFsethostname On
RPAFproxy_ips $varnish_proxy_ip
RPAFheader X-Real-IP

O problema é que a instrução RPAFheader não é reconhecida no Debian6:

root@$hostname:~# apache2ctl configtest
Invalid command 'RPAFheader', perhaps misspelled or defined by a module not included in the server configuration
Action 'configtest' failed.
The Apache error log may have more information.
root@$hostname:~# 

Alguém configurou o mod_rpaf no debian para me ajudar neste problema mod_rpaf

Muito obrigado pela sua ajuda!

    
por philippe 13.12.2011 / 15:44

1 resposta

3

Ok, responderei a minha própria pergunta para ajudar pessoas que podem ter o mesmo problema:

Primeiro adicione as seguintes linhas no arquivo de configuração do verniz (default.vcl)

sub vcl_recv {
   if (req.http.host == "myDomain.net") {
       set req.http.host = "myDomain.net";
       set req.backend = myBackend;
       # Compatiblity with Apache log
       remove req.http.X-Forwarded-For;
       set req.http.X-Forwarded-For = client.ip;
       # No cache for POST requests
       if (req.request == "POST") {
           return(pipe);
       }   
       return(lookup);
   }
}

Em seguida, adicione o formato de registros personalizados para o apache ao configurar seu vhost

LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined
 ...
 CustomLog      ${APACHE_LOG_DIR}/access.log varnishcombined

É isso aí!

    
por 21.12.2011 / 20:56