nginx unknown directive «geoip_country»

nginx
Обновление пакетов web-сервера порадовало такой ошибкой:

nginx -t
#nginx: [emerg] unknown directive "geoip_country" in /etc/nginx/nginx.conf:92
#nginx: configuration file /etc/nginx/nginx.conf test failed

Оказывается недавно разработчик http-сервера NGINX немного изменил структуру своего приложения и теперь с версии nginx 1.9.11 дополнительные модули нужно подключать отдельной директивой.
Такими стали:
GeoIP (ngx_http_geoip_module)
Image-Filter (ngx_http_image_filter_module)
Mail (includes all Mail modules: ngx_mail_{core, auth, imap, pop3, proxy, smtp, ssl}_module)
Stream (includes all Stream modules: ngx_stream_{core, access, limit_conn, proxy, ssl, upstream}_module)
XSLT (ngx_http_xslt_module)
По умолчанию в Centos папка с модулями:

/usr/share/nginx/modules

Смотрим содержимое:

ls /usr/share/nginx/modules
#mod-http-geoip.conf
#mod-http-image-filter.conf
#mod-http-perl.conf
#mod-http-xslt-filter.conf
#mod-mail.conf
#mod-stream.conf

Для подключения модуля нужно добавить инструкцию load_module в основную часть конфига nginx.

Пример:

user apache;
worker_processes  10;
#именно сюда иначе будут ошибки
load_module "modules/ngx_http_geoip_module.conf";


Возможные ошибки:

1.

nginx -t
#nginx: [emerg] dlopen() "/usr/share/nginx/modules/mod-http-geoip.conf" failed (/usr/share/nginx/modules/mod-http-geoip.conf: invalid ELF header) in /etc/nginx/nginx.conf:20
#nginx: configuration file /etc/nginx/nginx.conf test failed

Nginx’у не нравится подключение не скомпилированного файла.
Подключать прямой ссылкой на модуль в основном конфиге. Посмотреть расположения скомпилированного модуля:

cat /usr/share/nginx/modules/mod-http-geoip.conf

и вписать в конфиг:

user apache;
worker_processes  10;
load_module "/usr/lib64/nginx/modules/ngx_http_geoip_module.so";

2.

nginx -t
#nginx: [emerg] "load_module" directive is specified too late in /etc/nginx/nginx.conf:40
#nginx: configuration file /etc/nginx/nginx.conf test failed

Модуль подключен не в том месте. Переставить строку подключения модуля как в примере выше.

Если все сделано правильно, то тест конфига будет нормальным и http-сервер запустится:

nginx -t
#nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
#nginx: configuration file /etc/nginx/nginx.conf test is successful

1 коммент

Oleg Zadorozhnyi on 15.03.2017 at 14:00.

большое спасибо за статью

Ответить

Скажите свое мнение

ваш email не публикуется. обязательно *

;-) :yawn: :whew: :toivo: :tmi: :time: :thinking: :talking: :sweating: :swear: :sun: :star: :smoke: :smirk: :sleepy: :skype: :shock: :shake: :rofl: :rain: :punch: :puke: :poolparty: :pizza: :phone: :party: :oops: :nod: :no: :ninja: :neutral: :nerd: :music: :muscle: :mrgreen: :movie: :mooning: :mmm: :middlefinger: :makeup: :mail: :mad: :lol: :lipssealed: :kiss: :itwashtme: :inlove: :idea: :hi: :heidy: :heart: :headbang: :happy: :handshake: :giggle: :fubar: :flower: :evilgrin: :emo: :dull: :drunk: :drink: :doh: :devil: :dance: :cry: :cool: :coffie: :clapping: :cash: :call: :cake: :bug: :brokenheart: :bow: :blush: :beer: :bear: :bandit: :arrow: :angry: :angel: :^) :???: :?: :-| :-o :-P :-D :-) :-( :!:

 

*

code

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.