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

user1955934 picture user1955934 · Jul 9, 2018 · Viewed 8.8k times · Source

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?

Answer

Danila Vershinin picture Danila Vershinin · Jul 10, 2018

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.