NginX GeoIP Module Config - load_module not allowed on First Line of Conf
Asked Answered
P

2

4

My nginx conf looks like this:

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

server {

}

server {

}

I had installed mod-http-geoip via sudo yum install nginx-mod-http-geoip

and i have these:

/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

The error I get:

2018/07/09 09:37:14 [emerg] 9552#0: "load_module" directive is not allowed here in /usr/share/nginx/modules/mod-http-geoip.conf:1

This is my 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'

Note that the above had "--with-http_geoip_module=dynamic" argument

Can someone point what im missing?

I followed Peter Jones' answer on this post: How to enable dynamic module with an existing NGINX installation

I also tried: - Putting load_module "/usr/lib64/nginx/modules/ngx_http_geoip_module.so"; in the first line of my .conf file. - putting load_module "/usr/lib64/nginx/modules/ngx_http_geoip_module.so"; inside the server { }

All giving me the same error, "load_module" directive is not allowed here

Do I need to run ./configure command, make or anything?

Po answered 9/7, 2018 at 10:23 Comment(0)
C
3

Based on all the information so far, you have installed nginx from EPEL repository. While there's nothing wrong with that, I would suggest to install it from nginx's own YUM repository as it's:

  • coming from the software's developer
  • more recent (as I see now the nginx own repo is with 1.14.0 while epel's is on 1.12.2)

So make sure you install nginx properly.

Every nginx distribution tends to have their own convention for structuring files. But nginx configuration rules are the same across the board. So:

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

}
server {

}

... isn't really possible, as server block should go within http section.

The load_module should be placed at the top level (beginning of the file) within /etc/nginx/nginx.conf.

If you can't move from / want to stick to EPEL's nginx distribution

The EPEL nginx package convention is to include those load_module directives from each module's .conf file:

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

After a module is installed, it drops a .conf file with load_module to load it.

Make sure that include goes at the top of your nginx configuration and not inside any section.

Corcoran answered 10/7, 2018 at 6:29 Comment(1)
turns out what i had was a modular conf file within /etc/nginx/nginx.conf. AwesomePo
I
1

/usr/share/nginx/modules is really just a symlink to /usr/lib64/nginx/modules and Nginx is expecting to find the actual modules in there, not config directives.

Looking at your config above I would expect the path to your config file for dynamic modules to be /etc/nginx/modules-enabled, or you can include them in the very top section of your nginx.conf, above the events block.

Itemized answered 9/7, 2018 at 21:2 Comment(3)
but the content of /usr/share/nginx/modules (contains mod-http-geoip.conf) and /usr/lib64/nginx/modules (contains ngx_http_geoip_module.so) are not same. NginX complains about the directive load_modules, or does it really mean directory is invalid?Po
My bad, didn't notice you are using Red Hat. What happens if you put the load directives in your nginx.conf instead?Itemized
It's giving the same error. So i think the include works as expected, but load_modules is not allowed in there, i've looked around they seem to be placed in the first line, i wonder why it's complaining for me?Po

© 2022 - 2024 — McMap. All rights reserved.