限制国外ip访问网站

1.安装带GeoIP模块的Nginx

bash 复制代码
sudo apt update && sudo apt install nginx-full -y

安装后,用 nginx -V 2>&1 | grep geoip 检查是否包含相关模块。

2. 获取GeoIP数据库

访问 MaxMind官网 注册账号,登录后下载免费的 GeoLite2-Country.mmdb 文件。然后将数据库文件上传到服务器,例如 /etc/nginx/geoip/ 目录

3.配置Nginx拦截规则

在Nginx配置的 http 块中,添加 geoip2 配置,创建变量 $geoip2_data_country_code,它会存储来访IP的国家代码。

bash 复制代码
http {
    geoip2 /etc/nginx/geoip/GeoLite2-Country.mmdb {
        auto_reload 5m;
        $geoip2_data_country_code country iso_code;
    }
    # ... 其他配置
}

在需要拦截的 server 或 location 块中,通过 if 语句判断国家代码,返回403禁止访问。例如,以下配置只允许中国(CN)的IP访问,其他国家则会被拒绝。

bash 复制代码
server {
    listen 80;
    server_name your-domain.com;
    if ($geoip2_data_country_code != 'CN') {
        return 403;
    }
    # ... 其他配置
}

4.测试与验证

完成配置后,执行 sudo nginx -t 测试配置文件是否有语法错误。若显示 syntax is ok,再执行 sudo systemctl reload nginx 平滑重载配置。可以通过VPN等工具更换到不同国家的IP进行访问测试。

相关推荐
庵中十三居士17 小时前
用nginx代理DeepSeekHarness挂在域名下特定路径提供访问
运维·nginx·deepseek·harness
fb_1234518 小时前
K8s 网络通关手册:Ingress-Nginx 生产级路由 + Calico 三种隧道模式 + NetworkPolicy 白名单实战
网络·nginx·kubernetes
承渊政道19 小时前
新增一台服务器时还要重新装Nginx?Ansible只改hosts目标列表,同一份Playbook继续执行
运维·nginx·ansible·内网穿透·cpolar
KIDULT°19 小时前
K8s 网络进阶实战:Ingress-Nginx、Calico 与 NetworkPolicy 实验 + 排坑记录
网络·nginx·云原生·kubernetes
姜鱼问生2 天前
网页一片白?Docker 跑 Nginx 读不到文件,403 Forbidden 排查实录
nginx·docker·容器
我不会起名字3224 天前
网关超时比服务短:一次 499 的完整归因
网关·nginx·排查·499
味悲4 天前
Nginx笔记
linux·运维·笔记·nginx
John_Hui4 天前
CentOS7安装Nginx
linux·服务器·nginx
时间售卖铺6 天前
Nginx 反向代理
运维·nginx·云原生
life码农6 天前
Nginx location 优先级详解:匹配规则、修饰符与完整代码示例
运维·nginx