Конфигурация модуля NginX GeoIP — load_module не разрешен в первой строке конфигурации

Моя конфигурация nginx выглядит так:

include /usr/share/nginx/modules/mod-http-geoip.conf;

server {

}

server {

}

Я установил mod-http-geoip через sudo yum install nginx-mod-http-geoip

а у меня такие:

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

load_module "/usr/lib64/nginx/modules/ngx_http_geoip_module.so";

/usr/lib64/nginx/modules/ngx_http_geoip_module.so

Ошибка, которую я получаю:

09.07.2018 09:37:14 [появление] 9552#0: директива load_module не разрешена здесь в /usr/share/nginx/modules/mod-http-geoip.conf:1

Это мой nginx -V:

[root@ip-172-31-45-46 modules]# nginx -V
nginx version: nginx/1.12.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx --user=nginx --group=nginx --with-file-aio --with-ipv6 --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-http_perl_module=dynamic --with-http_auth_request_module --with-mail=dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream=dynamic --with-stream_ssl_module --with-google_perftools_module --with-debug --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --with-ld-opt=' -Wl,-E'

Обратите внимание, что в приведенном выше примере был аргумент «--with-http_geoip_module=dynamic».

Может ли кто-нибудь указать, чего мне не хватает?

Я последовал ответу Питера Джонса на этот пост: Как включить динамический модуль с существующей установкой NGINX

Еще пробовал: - Ставить load_module "/usr/lib64/nginx/modules/ngx_http_geoip_module.so"; в первой строке моего файла .conf. - поставить load_module "/usr/lib64/nginx/modules/ngx_http_geoip_module.so"; внутри сервера { }

Все выдают одну и ту же ошибку, директива load_module здесь не разрешена.

Нужно ли запускать команду ./configure, make или что-то еще?


person user1955934    schedule 09.07.2018    source источник


Ответы (2)


Судя по всей информации, вы установили nginx из репозитория EPEL. Хотя в этом нет ничего плохого, я бы предложил установить его из собственного репозитория YUM nginx, поскольку он:

  • исходит от разработчика программного обеспечения
  • более поздний (как я вижу, собственный репозиторий nginx с 1.14.0, а epel с 1.12.2)

Поэтому убедитесь, что вы установили nginx правильно.

В каждом дистрибутиве nginx есть свои правила структурирования файлов. Но правила настройки nginx везде одинаковы. Так:

include /usr/share/nginx/modules/mod-http-geoip.conf;
server {

}
server {

}

... на самом деле это невозможно, так как блок server должен находиться в разделе http.

load_module должен быть размещен на верхнем уровне (в начале файла) внутри /etc/nginx/nginx.conf.

Если вы не можете перейти или хотите придерживаться дистрибутива EPEL nginx

Соглашение о пакетах EPEL nginx заключается в том, чтобы включать эти директивы load_module из файла .conf каждого модуля:

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

После установки модуля он загружает файл .conf с load_module для его загрузки.

Убедитесь, что include находится вверху вашей конфигурации nginx, а не внутри какого-либо раздела.

person Danila Vershinin    schedule 10.07.2018
comment
Оказывается, у меня был модульный файл конфигурации в /etc/nginx/nginx.conf. Потрясающий - person user1955934; 10.07.2018

/usr/share/nginx/modules на самом деле просто символическая ссылка на /usr/lib64/nginx/modules, и Nginx ожидает найти там фактические модули, а не директивы конфигурации.

Глядя на вашу конфигурацию выше, я ожидаю, что путь к вашему файлу конфигурации для динамических модулей будет /etc/nginx/modules-enabled, или вы можете включить их в самый верхний раздел вашего nginx.conf, над блоком событий.

person miknik    schedule 09.07.2018
comment
но содержимое /usr/share/nginx/modules (содержит mod-http-geoip.conf) и /usr/lib64/nginx/modules (содержит ngx_http_geoip_module.so) не совпадает. NginX жалуется на директиву load_modules, или это действительно означает, что каталог недействителен? - person user1955934; 10.07.2018
comment
Плохо, не заметил, что ты используешь Red Hat. Что произойдет, если вместо этого вы поместите директивы загрузки в свой nginx.conf? - person miknik; 10.07.2018
comment
Выдает ту же ошибку. Итак, я думаю, что включение работает, как и ожидалось, но load_modules там не разрешены, я осмотрелся, они, кажется, помещены в первую строку, интересно, почему он жалуется на меня? - person user1955934; 10.07.2018