web-dev-qa-db-ja.com

GeoIP HTTPリクエストヘッダーをApacheでバックエンドに渡す方法は?

私はnginxを使用してHTTPリクエストをDockerコンテナ内のApache2.4(mod_php5)のスコープで実行されているPHPアプリケーションにプロキシしています( cbeer/piwik )。

                     +------------------------------+
                     |        Docker Container      |
+-------+            |  +--------+          +-----+ |
| nginx |----------->|->| Apache |--------->| php | |
+-------+ proxy_pass |  +--------+ mod_php5 +-----+ |
                     +------------------------------+

PHPアプリケーションはPiwik2.16です。

私はnginxでGeoIPHTTPヘッダーを挿入します:

proxy_set_header GeoIP-Addr             "$remote_addr";
proxy_set_header GeoIP-Country-Code     "$geoip_country_code";
proxy_set_header GeoIP-Country-Name     "$geoip_country_name";
proxy_set_header GeoIP-Continent-Code   "$geoip_city_continent_code";
proxy_set_header GeoIP-Region-Name      "$geoip_region_name";
proxy_set_header GeoIP-Region           "$geoip_region";
proxy_set_header GeoIP-City             "$geoip_city";
proxy_set_header GeoIP-Metro-Code       "$geoip_dma_code";
proxy_set_header GeoIP-Area-Code        "$geoip_area_code";
proxy_set_header GeoIP-Latitude         "$geoip_latitude";
proxy_set_header GeoIP-Longitude        "$geoip_longitude";
proxy_set_header GeoIP-Postal-Code      "$geoip_postal_code";
proxy_set_header GeoIP-Isp              "$geoip_org";
proxy_set_header GeoIP-Organization     "$geoip_org";
proxy_set_header GeoIP-Netspeed         "";

残念ながら、Piwikは(少なくともそれを考えています)vianginxが挿入されたリクエストHTTPヘッダーを見ることができません。ジオロケーションのPiwik設定ページに、PiwikがPHPの$_SERVER内でGeoIP変数を見つけることができなかったという警告があります。 GeoIPヘッダーは、たとえば次のように到着します。 HTTP_GEOIP_ADDRですが、GEOIP_ADDRである必要があります。また、これらの「新しい」ヘッダー名を使用するようにアプリケーションを編集することもできません。

@RichardSmithは、setenvを使用してApache内でHTTP_GEOIP_変数をGEOIP_にマップする必要があると述べました。いくつかの組み合わせを試しましたが、環境変数の値として変数(リクエストヘッダー)を使用することができませんでした。

SetEnv GEOIP_ADDR "%{HTTP_GEOIP_ADDR}e"

これにより、%{HTTP_GEOIP_CITY}eの値ではなく、実際の文字列 "HTTP_GEOIP_CITY"が変数に格納されます。

Setenvを使用してApache内でHTTP_GEOIP_変数をGEOIP_にマップする方法は?

1
burnersk

ApacheのSetEnvディレクティブ構文に関するあなたの仮定は間違っています。

ドキュメントから、それは逆のようです:

SetEnv HTTP_GEOIP_ADDR %{GeoIP-Addr}e

ドキュメントへのリンクは次のとおりです。

https://httpd.Apache.org/docs/2.4/mod/mod_env.html#setenv

Sets an internal environment variable, which is then available to Apache HTTP Server modules, and passed on to CGI scripts and SSI pages.

Example

SetEnv SPECIAL_PATH /foo/bin

したがって、宣言を交換すると、機能する可能性があります。

2
Marcel