Nginx proxy_set_header não funciona para o Apache GEOIP

1

Estou usando o proxy reverso Nginx para o apache2 usando o seguinte tutorial .

Então eu tento instalar o geoip no Nginx usando este tutorial

O proxy reverso funciona perfeitamente por um tempo, até que eu tentei instalar o banco de dados geoip para que eu pudesse obter o código do país no PHP.

Eu tenho o seguinte no nginx configurado como o tutorial instruído.

location ~ \.php$ {

    #       location / {
            #fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            #include snippets/fastcgi-php.conf;

           proxy_pass http://1.2.3.4:8080$request_uri;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
           proxy_set_header GEOIP_COUNTRY_CODE $geoip_country_code;
           proxy_set_header GEOIP_COUNTRY_CODE3 $geoip_country_code3;
           proxy_set_header GEOIP_COUNTRY_NAME $geoip_country_name;

           proxy_set_header GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code;
           proxy_set_header GEOIP_CITY_COUNTRY_CODE3 $geoip_city_country_code3;
           proxy_set_header GEOIP_CITY_COUNTRY_NAME $geoip_city_country_name;
           proxy_set_header GEOIP_REGION $geoip_region;
           proxy_set_header GEOIP_CITY $geoip_city;
           proxy_set_header GEOIP_POSTAL_CODE $geoip_postal_code;
           proxy_set_header GEOIP_CITY_CONTINENT_CODE $geoip_city_continent_code;
           proxy_set_header GEOIP_LATITUDE $geoip_latitude;
           proxy_set_header GEOIP_LONGITUDE $geoip_longitude;
    include /etc/nginx/proxy_params;
    }

Se eu usar proxy_pass para o apache2, as variáveis GEOIP são ** não mostradas em phpinfo .

Se eu usar nginx fastcgi_pass diretamente (desligando o proxy reverso para o apache), eu posso obter as variáveis de ambiente definidas e elas são refletidas no phpinfo.

Parece que proxy_set_header pode não estar funcionando, já que o apache não parece estar lendo.

O que devo fazer para que o apache possa obter todas as variáveis?

    
por Someone Special 17.01.2017 / 18:16

1 resposta

2

Parece que este tutorial e vários outros sites que copiam os códigos deste tutorial do geoip nginx estão errados / desatualizados.

ao definir o cabeçalho do proxy, parece que você não pode usar sublinhado (_) e mus use (-). Então, depois de mudar de

proxy_set_header GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code;

para isso

proxy_set_header GEOIP-CITY-COUNTRY-CODE $geoip_city_country_code;

o apache é capaz de obter as variáveis e também está mostrando no meu phpinfo agora.

Meu bloco completo de localização para o php, portanto, se parece com isso agora.

location ~ \.php$ {

           proxy_pass http://1.2.3.4:8080$request_uri;
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;
           proxy_set_header GEOIP-COUNTRY-CODE $geoip_country_code;
           proxy_set_header GEOIP-COUNTRY-CODE3 $geoip_country_code3;
           proxy_set_header GEOIP-COUNTRY-NAME $geoip_country_name;

           proxy_set_header GEOIP-CITY-COUNTRY-CODE $geoip_city_country_code;
           proxy_set_header GEOIP-CITY-COUNTRY-CODE3 $geoip_city_country_code3;
           proxy_set_header GEOIP-CITY-COUNTRY-NAME $geoip_city_country_name;
           proxy_set_header GEOIP-REGION $geoip_region;
           proxy_set_header GEOIP-CITY $geoip_city;
           proxy_set_header GEOIP-POSTAL_CODE $geoip_postal_code;
           proxy_set_header GEOIP-CITY-CONTINENT-CODE $geoip_city_continent_code;
           proxy_set_header GEOIP-LATITUDE $geoip_latitude;
           proxy_set_header GEOIP-LONGITUDE $geoip_longitude;
    include /etc/nginx/proxy_params;
    }

Com ele acima de configurações, eu seria capaz de obter as seguintes variáveis de servidor com seus valores preenchidos. Observe que alguns servidores adicionaram o prefixo HTTP por motivos de segurança. E de alguma forma ... os traços são convertidos novamente em underscores novamente.

$_SERVER['HTTP_GEOIP_LONGITUDE'] 
$_SERVER['HTTP_GEOIP_LATITUDE'] 
$_SERVER['HTTP_GEOIP_CITY'] 
$_SERVER['HTTP_GEOIP_REGION'] 
$_SERVER['HTTP_GEOIP_CITY_COUNTRY_CODE'] 
$_SERVER['HTTP_GEOIP_COUNTRY_NAME'] 
$_SERVER['HTTP_GEOIP_COUNTRY_CODE3'] 
$_SERVER['HTTP_GEOIP_COUNTRY_CODE']
    
por 17.01.2017 / 18:41