Estoy usando el proxy inverso de Nginx para Apache2 usando lo siguientetutorial.
Luego intento instalar geoip en Nginx usando estotutorial
El proxy inverso funciona perfectamente desde hace un tiempo, hasta que intenté instalar la base de datos geoip para poder obtener el código de país en PHP.
Tengo lo siguiente en nginx configurado como lo indica el tutorial.
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;
}
Si uso proxy_pass para apache2, las variables GEOIP **no se muestran todas en phpinfo.
Si uso nginx fastcgi_pass directamente (desactivando el proxy inverso a Apache), puedo configurar las variables de entorno y se reflejan en phpinfo.
Parece que proxy_set_header no funciona porque Apache no parece estar leyéndolo.
¿Qué tengo que hacer para que Apache pueda obtener todas las variables?
Respuesta1
Parece que este tutorial y muchos otros sitios web que copian los códigos de este tutorial de geoip nginx son incorrectos o están desactualizados.
Al configurar el encabezado del proxy, parece que no se puede usar el guión bajo (_) y el uso musa (-). Entonces después de cambiar de
proxy_set_header GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code;
a esto
proxy_set_header GEOIP-CITY-COUNTRY-CODE $geoip_city_country_code;
Apache puede obtener las variables y ahora también se muestra en mi phpinfo.
Por lo tanto, mi bloque de ubicación completo para PHP se ve así ahora.
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;
}
Con la configuración anterior, podría obtener las siguientes variables del servidor con sus valores completos. Tenga en cuenta que algunos servidores agregaron el prefijo HTTP por razones de seguridad. Y de alguna manera... los guiones se convierten nuevamente en guiones bajos.
$_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']