Docker NGINX加载Geoip模板方式

 更新时间:2026年04月08日 09:59:40   作者:还是那片西瓜吗  
本文介绍了在Docker环境下配置NGINX使用GeoIPIP模块的方法,包括下载GeoIPIP库、配置Nginx和子配置文件、启动Docker容器等步骤,并进行了访问和日志查看测试

前提环境:

  • Docker 环境

涉及参考文档:

一、下载GeoIP IP库

二、配置Nginx主配置文件

vim /data/nginx/MangoMoh/dos/nginx.conf
user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

load_module modules/ngx_http_geoip_module.so;   #加载geoip模块
load_module modules/ngx_stream_geoip_module.so; #加载geoip模块

events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    geoip_country /var/log/nginx/geoip/GeoCountry.dat; #数据放在日志文件一起挂载进行。实际个人自定义即可
    geoip_city    /var/log/nginx/geoip/GeoCity.dat;
    geoip_proxy 0.0.0.0/0;
    geoip_proxy_recursive on;

    log_format main escape=json '{'
                '"msec": "$msec", ' # 以秒为单位的时间,日志写入时分辨率为毫秒
                '"connection": "$connection", ' # 连接序列号
                '"connection_requests": "$connection_requests", ' # ���过连接发出的当前请求数
                '"pid": "$pid", ' # process pid
                '"request_id": "$request_id", ' # the unique request id
                '"request_length": "$request_length", ' # 请求长度(包括请求行、标头和请求正文)
                '"remote_addr": "$remote_addr", ' # 客户地址
                '"remote_user": "$remote_user", ' # 身份验证提供的用户名
                '"remote_port": "$remote_port", ' # 客户端端口
                '"time_local": "$time_local", '   # 通用日志格式的本地时间
                '"time_iso8601": "$time_iso8601", ' # ISO 8601 标准格式的本地时间
                '"request": "$request", ' # 完整的原始请求行
                '"request_uri": "$request_uri", ' # 完整的原始请求 URI(带参数)
                '"args": "$args", ' # 请求行中的参数
                '"status": "$status", ' # 响应状态
                '"body_bytes_sent": "$body_bytes_sent", ' # 发送到客户端的字节数,不计算响应标头;
                '"bytes_sent": "$bytes_sent", ' # 发送到客户端的字节数
                '"http_referer": "$http_referer", ' # 防盗链
                '"http_user_agent": "$http_user_agent", ' # user agent
                '"http_x_forwarded_for": "$http_x_forwarded_for", ' # 访问真实IP
                '"http_host": "$http_host", ' # 官方未找到,具体使用需要验证
                '"server_name": "$server_name", ' # 接受请求的服务器的名称
                '"request_time": "$request_time", ' # 请求处理时间
                '"upstream": "$upstream_addr", ' # 上游服务器,保留 IP 地址和端口
                '"upstream_connect_time": "$upstream_connect_time", ' # 保留与上游服务器建立连接所花费的时间
                '"upstream_header_time": "$upstream_header_time", ' # 保持时间 用于从上游服务器接收响应标头
                '"upstream_response_time": "$upstream_response_time", ' # 保留从上游服务器接收响应所花费的时间
                '"upstream_response_length": "$upstream_response_length", ' # 保留从上游服务器获得的响应长度
                '"upstream_cache_status": "$upstream_cache_status", ' # 保持访问响应缓存的状态
                '"ssl_protocol": "$ssl_protocol", ' # TLS protocol
                '"ssl_cipher": "$ssl_cipher", ' # TLS cipher
                '"scheme": "$scheme", ' # 请求方式
                '"request_method": "$request_method", ' # 请求方式
                '"server_protocol": "$server_protocol", ' # 请求协议
                '"pipe": "$pipe", ' # "p" if request was pipelined, "." otherwise
                '"gzip_ratio": "$gzip_ratio", '
                '"http_cf_ray": "$http_cf_ray",'
                '"geoip_country_code": "$geoip_country_code", '
                '"geoip_city": "$geoip_city"'
                '}';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;


    include /etc/nginx/conf.d/*.conf;
}

三、配置子NGINX 配置文件

vim /data/nginx/web.conf
server {
    listen       80;
    listen  [::]:80;
    server_name $host;

    root   /usr/share/nginx/html;
    index  index.html;
    gzip on;
    gzip_buffers 32 4k;
    gzip_comp_level 6;
    gzip_min_length 200;
    gzip_types text/css text/xml application/javascript;
    gzip_vary on;
    server_tokens off; 
    expires 1d;
    access_log  /var/log/nginx/website.access.log  main;
    error_log   /var/log/nginx/website.error.log;


    # 请求到入口页面
   location /myip {
          default_type text/plain;
          set_real_ip_from 0.0.0.0/0;
          real_ip_header X-Real-IP;
          real_ip_recursive on;
          return 200 "$remote_addr $geoip_country_name $geoip_country_code $geoip_city";
        }

    error_page   500 502 503 504  /50x.html;

    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

四、启动Docker 容器

docker run -d  --name=nginx \
-v /data/nginx/web.conf:/etc/nginx/conf.d/default.conf \
-v /data/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /data/docker_logs/web:/var/log/nginx \
-p 80:80 \
nginx:latest

五、访问测试

1、查看Web

https://IP/myip

2、查看日志

3、查看Grafana

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker Alpine镜像时区问题完美解决方案

    Docker Alpine镜像时区问题完美解决方案

    这篇文章主要介绍了Docker Alpine镜像时区问题完美解决方案,本文给大家分享两种解决方案供大家参考,需要的朋友可以参考下
    2021-04-04
  • Windows Docker端口占用错误及解决方案总结

    Windows Docker端口占用错误及解决方案总结

    在 Windows 环境下使用 Docker 容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配,合理调整动态端口范围,以及重启网络服务等实用技巧,有效解决 Windows Docker 端口占用错误,需要的朋友可以参考下
    2025-04-04
  • 详解Docker 修改已有镜像(commit )

    详解Docker 修改已有镜像(commit )

    本篇文章主要介绍了详解Docker 修改已有镜像(commit ),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • docker Compose部署springboot+vue前端端分离

    docker Compose部署springboot+vue前端端分离

    本文主要介绍了docker Compose部署springboot+vue前端端分离,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Docker安装OpenWrt的实现步骤

    Docker安装OpenWrt的实现步骤

    OpenWrt是一种可以运行在路由器上的嵌入式操作系统,提供了许多网络服务和功能,本文主要介绍了Docker安装OpenWrt的实现步骤,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • Vue.js中的watch属性详解

    Vue.js中的watch属性详解

    在Vue.js中,watch属性是一种非常重要的属性,它可以监听Vue实例中指定的数据变化,并在数据发生变化时执行相应的操作,本文将对 Vue.js中的watch属性进行详细的介绍,并附上相关的代码示例,需要的朋友可以参考下
    2023-06-06
  • docker磁盘空间清理的解决办法

    docker磁盘空间清理的解决办法

    前段时间遇到docker磁盘空间太少,无法写入数据的问题。本文就来介绍一下docker磁盘空间清理的解决办法,感兴趣的可以了解一下
    2021-06-06
  • 解决Docker中的error during connect异常情况

    解决Docker中的error during connect异常情况

    这篇文章主要介绍了解决Docker中的error during connect异常情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • docker-compose中link和external_links的区别及说明

    docker-compose中link和external_links的区别及说明

    拆分docker-compose.yml导致depends_on、links和external网络配置失效,因compose限制及Portainer命名冲突,解决方案为使用external_links或手动创建网络
    2025-09-09
  • Docker 部署 MongoDB容器的方法

    Docker 部署 MongoDB容器的方法

    Docker就可以帮助我们将开发的应用程序,以及该程序的依赖包都打包在一个文件里,下面通过本文给大家分享Docker 部署 MongoDB的详细教程,感兴趣的朋友一起看看吧
    2021-06-06

最新评论