Как передать HTTP-заголовки GeoIP-запроса в бэкэнд с Apache?
Я использую nginx для прокси HTTP-запросов к PHP-приложению, работающему в рамках Apache 2.4 (mod_php5) в контейнере Docker ( cbeer / piwik).
+------------------------------+
| Docker Container |
+-------+ | +--------+ +-----+ |
| nginx |----------->|->| apache |--------->| php | |
+-------+ proxy_pass | +--------+ mod_php5 +-----+ |
+------------------------------+
PHP-приложение - это Piwik 2.16.
Я внедряю HTTP-заголовки GeoIP с помощью nginx:
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 (по крайней мере, так думает) не может видеть заголовки HTTP запроса через nginx. На странице настроек Piwik для геолокации есть предупреждение о том, что Piwik не может найти переменные GeoIP в PHP $_SERVER
, Заголовки GeoIP поступают как, например, HTTP_GEOIP_ADDR
но должен быть GEOIP_ADDR
, Я также не могу редактировать приложение, чтобы использовать эти "новые" имена заголовков.
@RichardSmith упомянул, что я должен нанести на карту HTTP_GEOIP_
переменные к GEOIP_
в Apache, используя setenv. Я попробовал несколько комбинаций, но мне не удалось использовать переменные (заголовки запроса) в качестве значений для переменной среды.
SetEnv GEOIP_ADDR "%{HTTP_GEOIP_ADDR}e"
Это приводит к фактической строке "%{HTTP_GEOIP_CITY}e
"хранится в переменной вместо значения HTTP_GEOIP_CITY
,
Как на карте HTTP_GEOIP_
переменные к GEOIP_
в Apache, используя setenv?
1 ответ
Ваше предположение о Apache's SetEnv
неправильный синтаксис директивы
Из документации кажется, что все наоборот:
SetEnv HTTP_GEOIP_ADDR %{GeoIP-Addr}e
Вот ссылка на документацию:
https://httpd.apache.org/docs/2.4/mod/mod_env.html
Это заявляет, что 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
Так что, если вы поменяете свою декларацию, может сработать.