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

11,465

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.

Share:
11,465
user1955934
Author by

user1955934

Updated on June 04, 2022

Comments

  • user1955934
    user1955934 about 2 years

    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?