ip2region根据ip地址获得所在地区名称,本地化部署,本地数据库,无外网请求,开源

龙正哲

介绍

根据ip地址获得所在地区名称,如:中国|0|北京|北京市|联通。本地化部署,本地数据库,无外网请求。
仓库地址:https://gitee.com/jet-long/ip2region.git

软件架构

  1. 开发框架:webman,PHP版本在 8.0以上
  2. 扩展来源:https://gitee.com/lionsoul/ip2region

使用说明

  1. 可拉代码自己根据代码运行
git clone https://gitee.com/jet-long/ip2region.git
cd ip2region
composer install

# windows系统下启动webman服务
php .\windows.php

# linux系统下启动webman服务(加 -d是后台运行)
php webman start -d

# 打包为二进制文件(打包后在build目录下)
php -d phar.readonly=0 ./webman build:bin

# 指定打包的php版本
php -d phar.readonly=0 ./webman build:bin 8.1

2.【推荐】直接下载压缩包运行二进制文件(此二进制文件为webman自带功能打包,打包后的文件目前只支持运行在x86_64架构的linux系统上,不支持windows和mac系统)

1、下载最新的发行版(https://gitee.com/jet-long/ip2region/releases/tag/v1.0.0)
2、解压文件包 
3、给程序文件增加可执行权限
4、启动程序:./ip2region start -d

3.此程序开放了一个api地址,传入具体ip地址,返回对应的json格式数据


// 请求地址
http://localhost:9501/ip2region?ip=111.203.145.123

// 返回数据示例:
{
    "code": 1,
    "data": {
        "ip": "111.203.145.123",
        "region": "中国|0|北京|北京市|联通",
        "gap": 0.023193359375
    },
    "msg": "success",
    "time": 1735889117
}

4.nginx添加站点配置域名,并转发到webman服务

server {
    listen 80;
    server_name www.test.com;
    index index.php index.html index.htm;
    root /path/to/ip2region/public;

    # 将请求转发到webman
    location ^~ / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        if (!-f $request_filename){
            proxy_pass http://127.0.0.1:8703;
        }
    }

    # 拒绝访问所有以 .php 结尾的文件
    location ~ \.php$ {
        return 404;
    }

    # 允许访问 .well-known 目录
    location ~ ^/\.well-known/ {
        allow all;
    }

    # 拒绝访问所有以 . 开头的文件或目录
    location ~ /\. {
        return 404;
    }
}

此项目用于有根据ip获取地区名称需求的项目,现在高德地图接口需要收费,这个开源数据库获取有一点点不太准确,但是简单的需求还是可以用。

有需要的朋友直接拿去用,已开源。

336 5 2
5个评论

lsmir2

我都是直接把这个打包到项目里。。。没想过分开部署。多一个步骤。。。

  • 龙正哲 14天前

    打包到项目里是可以的,分开部署方便其他多个项目直接通过api调用。 有的项目以前使用了高德api的,可以替换为此系统api再改下返回数据的获取。

10bang

感谢分享

suihua

不支持 ipv6 差评

德玛西亚

感谢分享

  • 暂无评论

龙正哲

340
积分
0
获赞数
0
粉丝数
2023-02-14 加入
×
🔝