Nginx proxy_set_header が Apache GEOIP で動作しない

Nginx proxy_set_header が Apache GEOIP で動作しない

私はApache2へのNginxリバースプロキシを以下のように使用していますチュートリアル

次にこれを使用してNginxにgeoipをインストールしますチュートリアル

リバース プロキシは、PHP で国コードを取得できるように geoip データベースをインストールしようとするまで、しばらくの間問題なく動作していました。

チュートリアルの指示に従って、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;
    }

apache2にproxy_passを使用すると、GEOIP変数はphpinfoにすべて表示されません

nginx fastcgi_pass を直接使用すると (Apache へのリバース プロキシをオフにする)、環境変数が設定され、phpinfo に反映されます。

Apache が proxy_set_header を読み取っていないため、proxy_set_header が機能していない可能性があります。

Apache がすべての変数を取得できるようにするには、何をする必要がありますか?

答え1

このチュートリアルと、この geoip nginx チュートリアルからコードをコピーした他の複数の Web サイトは間違っているか、古くなっているようです。

プロキシヘッダーを設定するときに、アンダースコア(_)は使用できず、(-)は使用できないようです。

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']

関連情報