Como passar os cabeçalhos de solicitação HTTP do GeoIP para o back-end com o Apache?

1

Estou usando nginx para solicitações HTTP de proxy para um aplicativo PHP em execução no escopo do Apache 2.4 (mod_php5) em um contêiner Docker ( cbeer / piwik ).

                     +------------------------------+
                     |        Docker Container      |
+-------+            |  +--------+          +-----+ |
| nginx |----------->|->| apache |--------->| php | |
+-------+ proxy_pass |  +--------+ mod_php5 +-----+ |
                     +------------------------------+

A aplicação PHP é Piwik 2.16.

Eu injeto cabeçalhos HTTP GeoIP com nginx:

proxy_set_header GeoIP-Addr             "$remote_addr";
proxy_set_header GeoIP-Country-Code     "$geoip_country_code";
proxy_set_header GeoIP-Country-Name     "$geoip_country_name";
proxy_set_header GeoIP-Continent-Code   "$geoip_city_continent_code";
proxy_set_header GeoIP-Region-Name      "$geoip_region_name";
proxy_set_header GeoIP-Region           "$geoip_region";
proxy_set_header GeoIP-City             "$geoip_city";
proxy_set_header GeoIP-Metro-Code       "$geoip_dma_code";
proxy_set_header GeoIP-Area-Code        "$geoip_area_code";
proxy_set_header GeoIP-Latitude         "$geoip_latitude";
proxy_set_header GeoIP-Longitude        "$geoip_longitude";
proxy_set_header GeoIP-Postal-Code      "$geoip_postal_code";
proxy_set_header GeoIP-Isp              "$geoip_org";
proxy_set_header GeoIP-Organization     "$geoip_org";
proxy_set_header GeoIP-Netspeed         "";

Infelizmente o Piwik (pelo menos acha isso) não consegue ver os cabeçalhos HTTP da requisição via nginx injetada. Na página de configurações do Piwik para geolocalização é um aviso sobre o Piwik não encontrar as variáveis do GeoIP dentro do $_SERVER do PHP. Os cabeçalhos GeoIP chegam como, e. HTTP_GEOIP_ADDR , mas tem que ser GEOIP_ADDR . Eu também não consigo editar o aplicativo para usar esses "novos" nomes de cabeçalho.

@RichardSmith mencionou que eu tenho que mapear HTTP_GEOIP_ variables para GEOIP_ dentro do Apache usando setenv. Eu tentei várias combinações, mas não consegui usar variáveis (cabeçalhos de solicitação) como valores para a variável de ambiente.

SetEnv GEOIP_ADDR "%{HTTP_GEOIP_ADDR}e"

Isso resulta na string real " %{HTTP_GEOIP_CITY}e " armazenada na variável, em vez do valor de HTTP_GEOIP_CITY .

Como mapear HTTP_GEOIP_ variables para GEOIP_ dentro do Apache usando setenv?

    
por burnersk 03.03.2016 / 11:06

1 resposta

2

Sua suposição na sintaxe da diretiva SetEnv do Apache está errada.

Da documentação, parece que é o contrário:

SetEnv HTTP_GEOIP_ADDR %{GeoIP-Addr}e

Aqui está o link para a documentação:

link

Ele afirma que Sets an internal environment variable, which is then available to Apache HTTP Server modules, and passed on to CGI scripts and SSI pages.

Example

SetEnv SPECIAL_PATH /foo/bin

Então, se você trocar sua declaração, pode funcionar.

    
por 11.07.2016 / 12:16