Я использую обратный прокси Nginx для apache2, используя следующие руководство.
Затем я пытаюсь установить geoip на Nginx с помощью этого руководство
Обратный прокси-сервер некоторое время работает безупречно, пока я не попытался установить базу данных geoip, чтобы получить код страны на PHP.
У меня на nginx настроено следующее, как указано в руководстве.
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;
}
Если я использую proxy_pass для apache2, переменные GEOIP ** все не отображаются в phpinfo.
Если я использую nginx fastcgi_pass напрямую (отключая обратный прокси-сервер для apache), я могу установить переменные среды, и они будут отражены в phpinfo.
Похоже, что proxy_set_header может не работать, поскольку apache, похоже, не читает его.
Что мне нужно сделать, чтобы apache мог получить все переменные?
Похоже, что это руководство и несколько других веб-сайтов, которые копируют коды из этого руководства по geoip nginx, неверны / устарели.
при настройке заголовка прокси кажется, что нельзя использовать подчеркивание (_) и использовать Muse (-). Итак, после перехода с
proxy_set_header GEOIP_CITY_COUNTRY_CODE $geoip_city_country_code;
к этому
proxy_set_header GEOIP-CITY-COUNTRY-CODE $geoip_city_country_code;
apache может получать переменные, и теперь это также отображается на моем phpinfo.
Мой полный блок местоположения для php теперь выглядит так.
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;
}
С указанными выше настройками я смог бы получить следующие серверные переменные с заполненными значениями. Обратите внимание, что некоторые серверы добавили префикс HTTP из соображений безопасности. И каким-то образом ... тире снова преобразуются в символы подчеркивания.
$_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']