限制国外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进行访问测试。

相关推荐
空谷有来人4 小时前
Ubuntu22.04上安装配置站点
nginx
PC2005-cloud5 小时前
KubeSphere学习笔记:部署nginx
笔记·学习·nginx
后除5 小时前
Debian 安装与使用 Certbot
后端·nginx·https
风雨_838 小时前
轻量级 Nginx 日志分析和可视化平台 NginxPulse安装
运维·nginx
若无情我 纸小铭8 小时前
Nginx学习笔记(二) Nginx--connection&request
笔记·学习·nginx
xixingzhe28 小时前
net::ERR_INCOMPLETE_CHUNKED_ENCODING解决
nginx
轻揉小乔 真新人1 天前
使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制
运维·nginx·缓存
月落归舟1 天前
深入浅出:短信验证码登录场景下的 Nginx 负载均衡与 Session 共享
运维·nginx·负载均衡
东荷新绿1 天前
【运维开发】acme.sh 安装|签发泛域名SSL证书,宝塔Nginx部署+自动续期
nginx·腾讯云·运维开发·ssl·宝塔·acme.sh
是良辰2 天前
Docker Nginx HTTPS 自签证书部署完整操作文档
nginx·docker·https