Estou usando o nginx para fazer proxy de solicitações HTTP para um aplicativo PHP em execução no escopo do Apache 2.4 (mod_php5) em um contêiner do Docker ( cbeer/piwik ).
+------------------------------+
| Docker Container |
+-------+ | +--------+ +-----+ |
| nginx |----------->|->| apache |--------->| php | |
+-------+ proxy_pass | +--------+ mod_php5 +-----+ |
+------------------------------+
O aplicativo PHP é o Piwik 2.16.
Eu injeto cabeçalhos GeoIP HTTP 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 Piwik (pelo menos pensa) não pode ver os cabeçalhos HTTP de solicitação injetados via nginx. Na página de configurações do Piwik para geolocalização, há um aviso sobre o Piwik não ter encontrado variáveis GeoIP nos arquivos $_SERVER
. Os cabeçalhos GeoIP chegam como, por exemplo, HTTP_GEOIP_ADDR
mas precisam ser GEOIP_ADDR
. Também não consigo editar o aplicativo para usar esses "novos" nomes de cabeçalho.
@RichardSmith mencionou que tenho que mapear HTTP_GEOIP_
variáveis para GEOIP_
dentro do Apache usando setenv. 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_
variáveis GEOIP_
dentro do Apache usando setenv?
Sua suposição sobre a
SetEnv
sintaxe diretiva do Apache está errada.Pela documentação, parece que é o contrário:
SetEnv HTTP_GEOIP_ADDR %{GeoIP-Addr}e
Aqui está o link para a documentação:
https://httpd.apache.org/docs/2.4/mod/mod_env.html#setenv
Diz que
Sets an internal environment variable, which is then available to Apache HTTP Server modules, and passed on to CGI scripts and SSI pages.
Então, se você trocar sua declaração, pode funcionar.