KillSpider 集成与配置

KillSpider 既可以配合 Nginx 充当“看门人”角色(推荐),也可以作为独立的 API 被您的应用程序调用。

前置准备

  • 确保 KillSpider 主程序已启动,默认监听 127.0.0.1:5000
  • 确保 config.jsonlicense.key 配置正确
  • 确保 Nginx 服务器能访问 KillSpider 监听端口
1

Nginx 集成模式 生产环境推荐

使用 auth_request 模块,在处理请求前先进行鉴权。

用户请求
Nginx
鉴权网关
KillSpider
200 OK 后端业务
401 Err 拦截页面
/etc/nginx/nginx.conf
http {
    # ... 其他配置 ...

    server {
        listen 80;
        server_name www.your-website.com;

        # =========================================================
        # [核心配置] 定义 KillSpider 验证接口
        # 该 location 是内部调用的,外部无法直接访问
        # =========================================================
        location = /_killspider_check {
            internal; # 仅允许内部访问

            # 转发给 KillSpider 运行的地址
            proxy_pass http://127.0.0.1:5000/check;

            # [关键] 必须传递原始请求的特征信息,否则无法判断!
            proxy_pass_request_body off; # 不需要请求体,只发头信息
            proxy_set_header Content-Length "";

            # 1. 传递真实 IP (KillSpider 封禁的基础)
            proxy_set_header X-Real-IP $remote_addr;
            
            # 2. 传递原始访问的 URL (用于关键字过滤)
            proxy_set_header X-Original-URI $request_uri;
            
            # 3. 传递 User-Agent (用于识别爬虫特征)
            proxy_set_header User-Agent $http_user_agent;
        }

        # =========================================================
        # [应用配置] 保护您的业务页面
        # =========================================================
        location / {
            # 1. 开启鉴权:每个请求都会先去 /_killspider_check 跑一遍
            auth_request /_killspider_check;

            # 2. 定义拦截后的行为 (当 KillSpider 返回 401 时)
            error_page 401 = @error401;

            # 正常业务转发
            proxy_pass http://127.0.0.1:8080; 
        }

        # [可选] 自定义拦截返回页面
        location @error401 {
            default_type text/plain;
            return 401 "Access Denied: Blocked by KillSpider Firewall.";
        }
    }
}
配置生效: 修改完配置后,请测试并重载 Nginx
nginx -t && nginx -s reload
2

独立使用 (API 模式) 开发集成

适用于不使用 Nginx 或需要在应用代码层面(Python/Java/Go)手动鉴权的场景。

接口定义

URL http://127.0.0.1:5000/check
Method GET
必需 Headers:
  • X-Real-IP : 待检测的 IP
  • X-Original-URI : 待检测 URL (可选)
  • User-Agent : 浏览器指纹

返回值

200 OK

检测通过,允许访问。

401 Unauthorized

检测不通过(黑名单/高频/假爬虫),拒绝访问。

# 模拟一个正常用户
curl -v http://127.0.0.1:5000/check \
    -H "X-Real-IP: 192.168.1.100" \
    -H "X-Original-URI: /index.html" \
    -H "User-Agent: Mozilla/5.0 Windows NT 10.0"

# 模拟一个恶意爬虫 (在 BadIPs.txt 中或带有恶意关键字)
curl -v http://127.0.0.1:5000/check \
    -H "X-Real-IP: 10.0.0.5" \
    -H "X-Original-URI: /admin/login.php" \
    -H "User-Agent: python-requests/2.25"
import requests

def is_safe_request(user_ip, user_url, user_agent):
    try:
        # 发送给 KillSpider
        resp = requests.get(
            "http://127.0.0.1:5000/check",
            headers={
                "X-Real-IP": user_ip,
                "X-Original-URI": user_url,
                "User-Agent": user_agent
            },
            timeout=0.5 # 只有 0.5s 超时,防止拖慢业务
        )
        # 如果是 200,说明通过
        if resp.status_code == 200:
            return True
        else:
            print(f"Blocked: {resp.text}")
            return False
    except:
        # 如果 KillSpider 挂了,为了业务可用性,建议默认放行
        return True

# 业务逻辑中使用
if is_safe_request("1.2.3.4", "/home", "Chrome/90"):
    print("允许进入")
else:
    print("拒绝访问")

常见问题排查

Nginx 报错 500

1. 检查 KillSpider 主程序是否已启动。
2. 检查 nginx.conf 中 proxy_pass 地址是否正确指向了 127.0.0.1:5000。

防火墙无反应

检查 Nginx 配置中的 proxy_set_header X-Real-IP $remote_addr; 是否遗漏。如果没传 IP,系统默认放行。

Access Denied

说明拦截生效了。请查看 KillSpider 控制台或 logs 目录下的日志,确认是被“黑名单”还是“动态盾”拦截。

配置遇到困难?联系技术支持获取远程协助

联系客服