https://github.com/observabilitystack/geoip-api/actions/workflows/ci.yaml/badge.svg?branch=master](https://github.com/observabilitystack/geoip-api/actions/workflows/ci.yaml) !GitHub发布日期 !GitHub最后提交 !apache许可证
♻️ 这是https://github.com/shopping24%E5%8E%9F%E5%A7%8B%E4%BB%93%E5%BA%93%E7%9A%84%E5%AE%98%E6%96%B9%E7%BB%B4%E6%8A%A4%E5%88%86%E6%94%AF%EF%BC%8C%E7%94%B1@tboeghk%E7%BB%B4%E6%8A%A4%E3%80%82
本项目提供一个简单的REST Web服务,用于返回给定IP地址的地理位置信息。该服务从Maxminds GeoLite2(免费)或GeoIP2 City(商业)数据库加载位置信息。
您可以在微服务架构中使用此项目,当多个服务需要请求地理位置数据时尤为适用。该服务可与Logstash http过滤器插件配合使用,以丰富日志数据。
Docker Hub上提供的Docker镜像捆绑了最新的GeoLite2城市数据库。容器每周构建一次,包含最新版本的数据库。
$ docker run -p 8080:8080 ghcr.io/observabilitystack/geoip-api:latest
$ docker run -p 8080:8080 observabilitystack/geoip-api:latest
💡 尽管在生产环境中不推荐使用
latest标签运行容器,但对于geoip-api,我们强烈建议使用latest以获取最新的地理位置数据。
yyyy-VV(年份和周数)。latest。amd64和arm64架构。☝️ 在生产环境中,强烈建议使用商业版Maxmind GeoIP2 City数据库,因其具有更高的精度和数据质量。
您可以将mmdb格式的数据库挂载到容器中。数据库位置可通过以下变量自定义:
| 变量名 | 描述 | 默认值 |
|---|---|---|
| CITY_DB_FILE | GeoIP2 City或GeoLite2数据库文件路径 | /srv/GeoLite2-City.mmdb |
| ASN_DB_FILE | GeoIP2 ASN数据库文件路径 | /srv/GeoLite2-ASN.mmdb |
| ISP_DB_FILE | GeoIP2 ISP数据库文件路径 | (无) |
examples文件夹包含在Docker-Compose或Kubernetes中运行geoip-api的示例。
查询API的推荐方式是通过简单的HTTP GET请求。将待解析的IP地址作为路径参数提供。
bash$ curl -s http://localhost:8080/8.8.8.8 { "country": "US", "latitude": "37.751", "longitude": "-97.822", "continent": "NA", "timezone": "America/Chicago", "accuracyRadius": 1000, "asn": 15169, "asnOrganization": "GOOGLE", "asnNetwork": "8.8.8.0/24" } $ curl -s "http://localhost:8080/$(curl -s https://ifconfig.me/ip)" { "country": "DE", "stateprov": "Free and Hanseatic City of Hamburg", "stateprovCode": "HH", "city": "Hamburg", "latitude": "53.5742", "longitude": "10.0497", "continent": "EU", "timezone": "Europe/Berlin", "asn": 15943, "asnOrganization": "wilhelm.tel GmbH" }
Geoip-API在Link头中返回指向详细滥用和RIPE信息的链接。ripe-asn信息可直接获取。abuse链接需要注册并获取API密钥才能访问。
bashcurl "http://localhost:8080/$(curl -s https://ifconfig.me/ip)" HTTP/1.1 200 Link: <https://api.abuseipdb.com/api/v2/check?ipAddress=104.151.58.228>; rel="abuse", <https://stat.ripe.net/data/as-overview/data.json?resource=8881>; rel="ripe-asn" { "country": "DE", "stateprov": "Land Berlin", "stateprovCode": "BE", "city": "Berlin", "latitude": "52.5196", "longitude": "13.4069", "continent": "EU", "timezone": "Europe/Berlin", "accuracyRadius": 200, "asn": 8881, "asnOrganization": "1&1 Versatel Deutschland GmbH", "asnNetwork": "104.151.0.0/17" }
X-Geoip-Address头是查询API的另一种方式(如Nginx-Geoip示例中使用)。在此方式中,待解析的地址作为头值提供,地理位置信息也通过头值返回,返回码始终为204。
bash$ curl -sI -H "X-Geoip-Address: $(curl -s https://ifconfig.me/ip)" "http://localhost:8080/" HTTP/1.1 204 X-Geoip-Country: DE X-Geoip-StateProv: Free and Hanseatic City of Hamburg X-Geoip-City: Hamburg X-Geoip-Latitude: 53.6042 X-Geoip-Longitude: 10.0596 X-Geoip-Continent: EU X-Geoip-Timezone: Europe/Berlin
bashcurl --location 'http://localhost:8080/' \ --header 'Content-Type: application/json' \ --data '[ "8.8.8.8", "8.8.4.4" ]' { "8.8.4.4": { "country":"US", "latitude":"37.751", "longitude":"-97.822", "continent":"NA", "timezone":"America/Chicago", "accuracyRadius":1000, "asn":15169, "asnOrganization":"GOOGLE", "asnNetwork":"8.8.4.0/24" }, "8.8.8.8": { "country":"US", "latitude":"37.751", "longitude":"-97.822", "continent":"NA", "timezone":"America/Chicago", "accuracyRadius":1000, "asn":15169, "asnOrganization":"GOOGLE", "asnNetwork":"8.8.8.0/24" } }
一次最多支持100个地址。
结果为JSON对象,按请求的IP地址索引。
若请求的地址无法解析,响应中将缺少该条目。
项目通过多阶段Docker构建。需要有效的Maxmind许可证密钥以下载Geoip2数据库。
shell$ export MAXMIND_LICENSE_KEY=... $ docker build \ --build-arg MAXMIND_LICENSE_KEY=${MAXMIND_LICENSE_KEY} \ --build-arg VERSION=$(date +%Y-%V) \ -t geoip-api:latest .
若要构建(或测试)多平台镜像,使用Docker Buildx扩展:
shell$ docker buildx create --use --name multi-platform $ docker buildx build \ --platform linux/amd64,linux/arm64 \ --build-arg MAXMIND_LICENSE_KEY=${MAXMIND_LICENSE_KEY} \ -t geoip-api:latest-native -f Dockerfile.native .
我们期待您的评论、问题和拉取请求!
本项目采用Apache License, Version 2许可证。
本产品包含MaxMind创建的GeoLite2数据,可从[***]
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务