Ich verwende Nginx Reverse Proxy für Apache2 mit folgendenLernprogramm.
Dann versuche ich, Geoip mit diesem auf Nginx zu installierenLernprogramm
Der Reverse-Proxy funktionierte eine Zeit lang einwandfrei, bis ich versuchte, die GeoIP-Datenbank zu installieren, damit ich den Ländercode über PHP abrufen konnte.
Ich habe Folgendes auf Nginx gemäß den Anweisungen im Tutorial konfiguriert.
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;
}
Wenn ich proxy_pass für apache2 verwende, werden die GEOIP-Variablen **alle nicht in phpinfo angezeigt.
Wenn ich nginx fastcgi_pass direkt verwende (Reverse-Proxy zu Apache deaktiviere), kann ich die Umgebungsvariablen festlegen und sie werden in phpinfo angezeigt.
Es scheint, dass proxy_set_header nicht funktioniert, da Apache es offenbar nicht liest.
Was muss ich tun, damit Apache alle Variablen abrufen kann?
Antwort1
Es scheint, dass dieses Tutorial und mehrere andere Websites, die die Codes aus diesem GeoIP-Nginx-Tutorial kopieren, falsch/veraltet sind.
beim Setzen des Proxy-Headers scheint es, dass Sie keinen Unterstrich (_) verwenden können und stattdessen (-) verwenden müssen. Nach dem Wechsel von
proxy_set_header GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code;
dazu
proxy_set_header GEOIP-CITY-COUNTRY-CODE $geoip_city_country_code;
Apache kann die Variablen abrufen und sie werden jetzt auch in meinem PHP-Info angezeigt.
Mein kompletter Standortblock für PHP sieht daher jetzt so aus.
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;
}
Mit den obigen Einstellungen könnte ich die folgenden Servervariablen mit ihren Werten füllen. Beachten Sie, dass einige Server aus Sicherheitsgründen das HTTP-Präfix hinzugefügt haben. Und irgendwie ... werden die Bindestriche wieder in Unterstriche umgewandelt.
$_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']