问题
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