HttpGeoipModule $ geoip_country_code está em branco

3

No nginx.conf:

http { 
    geoip_country /etc/nginx/GeoIP.dat;
    ...
}

Se eu fizer:

server{
    ...
    location / {
        add_header X-Geo $geoip_country_code;                   
        add_header X-Geo3 $geoip_country_code3;
        add_header X-IP $remote_addr;
        ...
    }
}

Apenas X-IP aparece nos meus cabeçalhos.

$ curl -I www.example.org
HTTP/1.1 302 FOUND
Content-Type: text/html; charset=utf-8
Date: Thu, 17 Jan 2013 19:29:23 GMT
Location: http://www.example.org/login/?next=/
Server: nginx/1.2.2
Vary: Cookie
X-IP: 10.139.34.12
Connection: keep-alive

Se eu alterar o bloco de localização para:

location / {
    add_header X-Geo "foo";                   
    add_header X-Geo3 "bar";
    add_header X-IP $remote_addr;
    ...
}

Os cabeçalhos aparecem, como posso obter $geoip_country_code ?

    
por Kit Sunde 08.01.2013 / 12:02

4 respostas

5

Acabei de descobrir que o geo_ip tem uma opção interna para usar o X-Forwarded-For :

syntax: geoip_proxy address | CIDR;
default:     —
context:    http
This directive appeared in versions 1.3.0 and 1.2.1.
Defines trusted addresses. When a request comes from a trusted address, an address from the “X-Forwarded-For” request header field will be used instead.
    
por 14.05.2014 / 12:49
1

Ah, eu só descobri o que estava acontecendo. Ele estava tentando resolver o GeoIP para o IP LoadBalancers em vez do cliente, e é por isso que estava em branco. Uma vez que eu enrolei o host diretamente, ele retornou o resultado correto. Eu tive que usar o HttpRealipModule para dar ao HttpGeoipModule o IP do cliente. No meu conf:

real_ip_header X-Forwarded-For;
set_real_ip_from 0.0.0.0/0;
    
por 18.01.2013 / 07:05
0

Como você confirma quais cabeçalhos estão sendo enviados quando você acessa o / URL? Você pode tentar este comando curl?

Algo parecido com isto, mas com o seu URL:

% curl -I www.google.com
HTTP/1.1 200 OK
Date: Thu, 17 Jan 2013 18:58:36 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: PREF=ID=39403a60450f4bb3:FF=0:TM=1358449116:LM=1358449116:S=uoBAz3VFZpjyc1hA; expires=Sat, 17-Jan-2015 18:58:36 GMT; path=/; domain=.google.com
Set-Cookie: NID=67=MBsS_mn5gvM2Zzt6Q6kfIO5h_brntWLnAmxZAXsNPseUgb5puv_8p8Io0ybgRqY62z0ihF-G5DLFtQOMN5MyIzM70IgPbkN4qOXKhCnQuUUqGCyuKkCg5XL6WfZoDR9m; expires=Fri, 19-Jul-2013 18:58:36 GMT; path=/; domain=.google.com; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked
    
por 17.01.2013 / 19:59
0

Como alternativa, você pode especificar sua origem de IP ao configurar seu bloco geoip . Nota: Eu só testei isso no GeoIP2

geoip2 /etc/nginx/GeoIP/GeoLite2-Country.mmdb {
    $geoip2_data_country_code source=$http_x_forwarded_for country iso_code;
}
    
por 01.08.2017 / 03:12

Tags