【问题标题】:Installing GeoIP module for latest NGINX for Docker为最新的 NGINX for Docker 安装 GeoIP 模块
【发布时间】:2017-08-01 09:40:14
【问题描述】:

我正在尝试创建一个包含带有 GeoIP 模块的 nginx 服务的 docker 映像。据我尝试,使用任何标志运行apt-get install nginx 无助于在安装的nginx 中包含--with-http_geoip_module 模块。因此,我尝试从 nginx 源安装它

add-apt-repository ppa:nginx/development -y \
&& echo "deb-src http://ppa.launchpad.net/nginx/development/ubuntu xenial main" >> /etc/apt/sources.list \
&& apt-get update \
&& apt-get build-dep nginx -y \
&& cd /opt \
&& mkdir tempnginx \
&& cd tempnginx \
&& apt-get source nginx \

等等等等

GeoIP 无法正常工作,因为我试图将它放在日志中,如下所示:

nginx.conf

user  www-data;
worker_processes  1;
load_module modules/ngx_http_geoip_module.so;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

geoip_country /usr/share/GeoIP/GeoIP.dat;
geoip_city /usr/share/GeoIP/GeoLiteCity.dat;

log_format main '$remote_addr - [$time_local] '
        '"$request" $status $bytes_sent $request_time $upstream_response_time'
        '"$http_referer" "$http_user_agent" "$gzip_ratio" '
        '"$geoip_region" "$geoip_city" "$geoip_city_country_code"';
access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

}

日志只会将那些 GeoIP 参数打印为“-”

知道为什么它不起作用吗? Nginx 版本应该是最新的。

-- 编辑--

添加运行nginx -V的结果

nginx version: nginx/1.13.3
built with OpenSSL 1.0.2g  1 Mar 2016
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path=/usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with-threads --with-http_addition_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module=dynamic --with-http_sub_module --with-http_xslt_module=dynamic --with-stream=dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-mail=dynamic --with-mail_ssl_module --add-dynamic-module=/opt/tempnginx/nginx-1.13.3/debian/modules/nginx-auth-pam --add-dynamic-module=/opt/tempnginx/nginx-1.13.3/debian/modules/nginx-dav-ext-module --add-dynamic-module=/opt/tempnginx/nginx-1.13.3/debian/modules/nginx-echo --add-dynamic-module=/opt/tempnginx/nginx-1.13.3/debian/modules/nginx-upstream-fair --add-dynamic-module=/opt/tempnginx/nginx-1.13.3/debian/modules/ngx_http_substitutions_filter_module

模块

modules
path=/usr/lib/nginx/modules
http_ssl_module
http_stub_status_module
http_realip_module
http_auth_request_module
http_v2_module
http_dav_module
http_slice_module
http_addition_module
http_geoip_module
http_gunzip_module
http_gzip_static_module
http_image_filter_module=dynamic
http_sub_module
http_xslt_module=dynamic
stream_ssl_module
stream_ssl_preread_module
mail_ssl_module
module=/opt/tempnginx/nginx
1.13.3/debian/modules/nginx
module=/opt/tempnginx/nginx
1.13.3/debian/modules/nginx
module
module=/opt/tempnginx/nginx
1.13.3/debian/modules/nginx
module=/opt/tempnginx/nginx
1.13.3/debian/modules/nginx
module=/opt/tempnginx/nginx
1.13.3/debian/modules/ngx_http_substitutions_filter_module

【问题讨论】:

  • 尝试使用openresty/openresty 图像,看看是否有帮助
  • 对不起,我忘了说我想使用 ubuntu 基础镜像。我现在使用的是 ubuntu:16.04
  • 您是否在有关模块的日志中看到任何错误?还要确保您指定的数据路径存在于容器内,而不是空白文件
  • 据我所见,nginx错误日志中没有错误。该文件也存在于容器内。顺便说一句,我添加了 nginx -V 的结果供您参考
  • 尝试看看 openresty 图像是否适合你。这可能会对这个问题有所启发。还尝试在主机网络上运行容器,看看是否会发生同样的事情。在你的 docker run 命令中添加--net=host

标签: docker nginx networking devops geoip


【解决方案1】:

原来安装成功了,我才意识到我试图从localhost访问它,这意味着IP变得无法解析。在远程主机上尝试后,GeoIP 模块工作正常 :)

【讨论】:

    猜你喜欢
    • 2016-02-29
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多