Qual IP nginx usa para sessões pegajosas ip_hash?

1

O nginx usa o IP do cliente direto para ip_hash, ou também observa o cabeçalho HTTP X-forwarded-para usar como o endereço IP para ip_hash?

Por exemplo, em uma situação em que alguns clientes que usam um servidor proxy compartilhado acessam um balanceador de carga nginx com ip_hash, todos esses clientes teriam o mesmo nó?

Ou será que o nginx usaria o cabeçalho X-forwarded-for para hash-los para nós diferentes?

    
por Richard Nichols 13.09.2011 / 04:31

2 respostas

2

De:

link

The key for the hash is the class-C network address of the client.

Também de:

nginx-0.8.53/src/http/modules/ngx_http_upstream_ip_hash_module.c:
     91 static ngx_int_t
     92 ngx_http_upstream_init_ip_hash_peer(ngx_http_request_t *r,
     93     ngx_http_upstream_srv_conf_t *us)
     94 {
...
    114     if (r->connection->sockaddr->sa_family == AF_INET) {
    115
    116         sin = (struct sockaddr_in *) r->connection->sockaddr;
    117         p = (u_char *) &sin->sin_addr.s_addr;
    118         iphp->addr[0] = p[0];
    119         iphp->addr[1] = p[1];
    120         iphp->addr[2] = p[2];
    121
    122     } else {
    123         iphp->addr[0] = 0;
    124         iphp->addr[1] = 0;
    125         iphp->addr[2] = 0;
    126     }
...
    164         for (i = 0; i < 3; i++) {
    165             hash = (hash * 113 + iphp->addr[i]) % 6271;
    166         }

Validando a documentação. Seria muito fácil modificar o código para incluir dados como o XFF.

    
por 13.09.2011 / 08:09
6

Embora essa questão seja bastante antiga e a resposta esteja correta, após algumas pesquisas para resolver meu próprio problema de balanceamento de carga, descobri que existe uma nova opção para fazer o ip do cliente com base no X-Forwarded-For ou X-Real -IP e quando combinado com a diretiva ip_hash equilibra corretamente o carregamento usando o IP real do usuário como o hash.

link

    set_real_ip_from        127.0.0.1;  # nginx and varnish on other ports
    real_ip_header          X-Real-IP;  # or X-Forwarded-For
#   real_ip_recursive       on;         # doesn't work on nginx 1.0
    
por 19.08.2015 / 19:51