私は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_
にマップする方法は?
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
したがって、宣言を交換すると、機能する可能性があります。