2016-08-11 24 views
0

Под OS X и Ubuntu я использую GeoIP в PHP через Nginx, как это:Как получить нативную поддержку GeoIP в Nginx под Alpine Linux

nginx.conf: 
geoip_country /somepath/GeoIP/GeoIP.dat; 
fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code; 

php: 
$country = $_SERVER["GEOIP_COUNTRY_CODE"] 

Однако под Alpine Linux, версия пакета Nginx (apk add nginx) похоже, не включает GeoIP (подтверждено nginx -V).

Я мог бы скомпилировать nginx из источника с --with-http_geoip_module, но тогда мне придется обновлять nginx вручную, что нежелательно. Мой текущий обходной путь заключается в следующем:

ash: 
sudo apk add geoid 

php: 
$country = exec("geoiplookup $_SERVER[REMOTE_ADDR]"); 

Как получить нативную поддержку GeoIP в Nginx под Alpine Linux?

Обновление: geoip_country не распознается, хотя я установлен с края.

$ apk update 
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/main/x86_64/APKINDEX.tar.gz 
fetch http://dl-cdn.alpinelinux.org/alpine/edge/community/x86_64/APKINDEX.tar.gz 
fetch http://dl-cdn.alpinelinux.org/alpine/edge/main/x86_64/APKINDEX.tar.gz 
v3.4.4-36-ge528256 [http://dl-cdn.alpinelinux.org/alpine/v3.4/main] 
v3.4.0-4239-gff0f660 [http://dl-cdn.alpinelinux.org/alpine/edge/community] 
v3.4.0-4267-ga3e3a29 [http://dl-cdn.alpinelinux.org/alpine/edge/main] 
OK: 12899 distinct packages available 
$ apk add [email protected] [email protected] 
(1/5) Installing [email protected] (2.4.3-r1) 
(2/5) Installing pcre (8.38-r1) 
(3/5) Installing [email protected] (2.4.3-r1) 
(4/5) Installing [email protected] (1.10.1-r9) 
Executing nginx-1.10.1-r9.pre-install 
(5/5) Installing [email protected] (1.10.1-r9) 
Executing busybox-1.24.2-r11.trigger 
OK: 500 MiB in 92 packages 
$ rc-service nginx restart 
* Caching service dependencies ...                        [ ok ] 
nginx: [emerg] unknown directive "geoip_country" in /etc/nginx/nginx.conf:1 
nginx: configuration file /etc/nginx/nginx.conf test failed                  [ !! ] 
* ERROR: nginx failed to start 

ответ

2

Я обновил пакет nginx, i.a. добавлена ​​поддержка GeoIP в качестве динамического модуля. Он находится в пакете nginx-mod-http-geoip.


Этот пакет еще не установлен в какой-либо стабильной версии (будет в версии 3.5), поэтому вам нужно использовать кромку. Если вы находитесь на стабильной v3.4, вы можете установить только определенные пакеты от края с помощью repository pinning:

echo "@edge http://dl-cdn.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories 
apk update 
apk add [email protected] [email protected] 

Однако Nginx в крае построен с новыми версиями библиотек, чем у вас есть из стабильной ветви, так что это может работать неправильно (если есть некоторые несовместимые изменения ABI).

В этом случае вы можете создать nginx пакет yourself или просто использовать портированном пакет из my repository:

echo "@geeknet https://alpine.geeknet.cz/packages/v3.4/backports" >> /etc/apk/repositories 
wget -O /etc/apk/keys/[email protected] https://raw.githubusercontent.com/jirutka/aports/v3.4/.keys/[email protected] 
apk update 
apk add [email protected] [email protected] 
+0

Спасибо за быструю обработку! Пожалуйста, опубликуйте комментарий, когда он доступен через систему пакетов. – forthrin

+0

Это уже ... –

+0

'geoip_country' не распознается, хотя я установлен с края. Как я могу это решить? – forthrin

 Смежные вопросы

  • Нет связанных вопросов^_^