Nginx proxy_set_header не работает с Apache GEOIP

Nginx proxy_set_header не работает с Apache GEOIP

Я использую обратный прокси-сервер 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 мог получить все переменные?

решение1

Похоже, что это руководство и несколько других сайтов, которые копируют коды из этого руководства по geoip nginx, неверны/устарели.

при настройке заголовка proxy, похоже, нельзя использовать подчеркивание (_) и 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']

Связанный контент