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

天大地大妈咪最大 提交于 2019-12-12 18:22:40

问题


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?


回答1:


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.




回答2:


/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.



来源:https://stackoverflow.com/questions/51243269/nginx-geoip-module-config-load-module-not-allowed-on-first-line-of-conf

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!