openresty如何禁止海外ip访问

        前几天,我有一个徒弟问我,如何禁止海外ip访问他的网站系统?操作系统采用的是centos7.9,发布服务采用的是openresty。通过日志他发现,有很多类似以下数据

{"host":"172.30.7.95","clientip":"122.189.224.120","size":1818,"responsetime":2025-05-27T14:28:53,"http_host":"www.pingan.com","url":"/401.html","agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36","country_code":"CN","country_name":"China","city_name":"-","status":"401"}
{"host":"172.30.7.95","clientip":"199.204.97.58","size":154,"responsetime":2025-05-27T14:29:01,"http_host":"_","url":"-","agent":"-","country_code":"US","country_name":"United States","city_name":"-","status":"400"}
{"host":"172.30.7.95","clientip":"122.189.224.28","size":1818,"responsetime":2025-05-27T14:29:16,"http_host":"lsw-fast.lenovo.com.cn","url":"/401.html","agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36","country_code":"CN","country_name":"China","city_name":"-","status":"401"}
{"host":"172.30.7.95","clientip":"204.76.203.219","size":1818,"responsetime":2025-05-27T14:29:22,"http_host":"116.62.152.21","url":"/401.html","agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36 Edg/90.0.818.46","country_code":"NL","country_name":"The Netherlands","city_name":"-","status":"401"}
{"host":"172.30.7.95","clientip":"43.133.253.253","size":1818,"responsetime":2025-05-27T14:28:48,"http_host":"www.anxundata.com","url":"/401.html","agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1","country_code":"KR","country_name":"South Korea","city_name":"-","status":"401"}
{"host":"172.30.7.95","clientip":"43.133.253.253","size":1818,"responsetime":2025-05-27T14:28:48,"http_host":"www.anxundata.com","url":"/401.html","agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1","country_code":"KR","country_name":"South Korea","city_name":"-","status":"401"}
{"host":"172.30.7.95","clientip":"42.83.147.54","size":587,"responsetime":2025-05-27T14:33:12,"http_host":"anxundata.com","url":"/index.html","agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/74.0.3729.169 Safari/537.36","country_code":"CN","country_name":"China","city_name":"-","status":"200"}
{"host":"172.30.7.95","clientip":"45.82.255.188","size":1818,"responsetime":2025-05-27T14:36:35,"http_host":"anxundata.com","url":"/401.html","agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36","country_code":"CY","country_name":"Cyprus","city_name":"-","status":"401"}

        我看过数据之后,直接给出答案使用geoip2模块与GeoLite2的ip库匹配禁止访问就行。下面就是geoip2模块与GeoLite2的ip库安装步骤(以下步骤是基于openresty已经安装成功的操作手法)。

一、增加依赖

yum install -y geoip-devel libmaxminddb-devel

二、geoip2模块安装

wget https://github.com/leev/ngx_http_geoip2_module/archive/refs/tags/3.4.tar.gz #下载geoip2模块
tar -zxf ngx_http_geoip2_module-3.4.tar.gz #解压文件包
mv ngx_http_geoip2_module-3.4/ /usr/local/src/ngx_http_geoip2_module #将文件拷贝到指定目录

三、下载及安装GeoLite2的ip库

tar -zxf GeoLite2-Country_20250523.tar.gz #将文件解压
cd GeoLite2-Country_20250523/ #进入文件
mv GeoLite2-Country.mmdb /usr/share/GeoIP/ #将IP库复制到GeoIP文件夹中

四、重新编译openresty

./configure --prefix=/usr/local/openresty --with-threads --with-file-aio --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_module --with-http_degradation_module --with-http_slice_module --with-http_stub_status_module --with-stream_ssl_module --with-stream_realip_module --with-stream_geoip_module=dynamic --with-stream_ssl_preread_module --with-compat --with-pcre-jit --with-stream --with-http_geoip_module --add-module=/usr/local/src/ngx_http_geoip2_module
gmake && gmake install

五、修改nginx主配置

vi /usr/local/openresty/nginx/conf/nginx.conf
user www;
worker_processes 2;
worker_cpu_affinity auto;
error_log /data/nginx/error.log;
worker_rlimit_nofile 65535;
pid  /data/nginx/nginx.pid;events {worker_connections  10240;use epoll;multi_accept on;
}http {include       mime.types;geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {auto_reload 60m; #每隔60分钟自动重载数据库$geoip2_data_country_code country iso_code; #IP所在-国家的编码$geoip2_data_country_name country names en; #IP所在-国家名$geoip2_data_city_name city names; #IP所在-城市名}default_type  application/octet-stream;map $time_iso8601 $logdate {'~^(?<ymd>\\d{4}-\\d{2}-\\d{2})' $ymd;default                       'date-not-found';}map $time_iso8601 $request_times {'~^(?<ymdhms>\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2})' $ymdhms;default                       'date-not-found';}map $geoip2_data_country_code $allowed_country {default no; #默认禁止所有访问CN yes; #只针对中国开放访问权限}log_format access-upstream '{"host":"$server_addr",''"clientip":"$remote_addr",''"size":$body_bytes_sent,''"responsetime":$request_times,''"http_host":"$host",''"url":"$uri",''"agent":"$http_user_agent",''"country_code":"$geoip2_data_country_code",''"country_name":"$geoip2_data_country_name",''"city_name":"$geoip2_data_city_name",''"status":"$status"}';sendfile on;tcp_nopush on;tcp_nodelay on;server_names_hash_bucket_size 128;server_names_hash_max_size 512;keepalive_timeout  1000s;client_header_timeout 15s;client_body_timeout 15s;send_timeout 1000s;proxy_cache_path /data/nginx levels=1:2 keys_zone=nginx-cache:20m max_size=50g inactive=168h;client_body_buffer_size 512k;client_header_buffer_size 256k;client_max_body_size 1024m;large_client_header_buffers 2 8k;proxy_connect_timeout 1000s;proxy_send_timeout 1000s;proxy_read_timeout 1000s;proxy_buffer_size 128k;proxy_buffers 8 256k;proxy_busy_buffers_size 256k;proxy_temp_file_write_size 256k;proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header;fastcgi_intercept_errors on;fastcgi_ignore_client_abort on;fastcgi_connect_timeout 1000s;fastcgi_send_timeout 1000s;fastcgi_read_timeout 1000s;fastcgi_buffer_size 128k;fastcgi_buffers 8 256k;fastcgi_busy_buffers_size 256k;fastcgi_temp_file_write_size 256k;gzip on;gzip_min_length 1k;gzip_buffers 4 32k;gzip_http_version 1.1;gzip_comp_level 6;gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;gzip_vary on;gzip_disable "MSIE [1-6].";include vhost/*.conf;
}

六、修改具体域名配置

location / {if ($allowed_country = no) {return 401;}index /data/wwwroot/index.html;
}

下一期将带来openresty+lua+redis把非正常访问的域名加入黑名单

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理解 Redis 事务-20 (MULTI、EXEC、DISCARD)

理解 Redis 事务&#xff1a;MULTI、EXEC、DISCARD Redis 事务允许你将一组命令作为一个单一的原子操作来执行。这意味着事务中的所有命令要么全部执行&#xff0c;要么全部不执行。这对于在需要一起执行多个操作时保持数据完整性至关重要。本课程将涵盖 Redis 事务的基础知识…

Milvus分区-分片-段结构详解与最佳实践

导读&#xff1a;在构建大规模向量数据库应用时&#xff0c;数据组织架构的设计往往决定了系统的性能上限。Milvus作为主流向量数据库&#xff0c;其独特的三层架构设计——分区、分片、段&#xff0c;为海量向量数据的高效存储和检索提供了坚实基础。 本文通过图书馆管理系统的…

Kettle 远程mysql 表导入到 hadoop hive

kettle 远程mysql 表导入到 hadoop hive &#xff08;教学用 &#xff09; 文章目录 kettle 远程mysql 表导入到 hadoop hive创建 对象 执行 SQL 语句 -mysql 导出 CSV格式CSV 文件远程上传到 HDFS运行 SSH 命令远程登录 run SSH 并执行 hadoop fs -put 建表和加载数据总结 创…

Linux输出命令——echo解析

摘要 全面解析Linux echo命令核心功能&#xff0c;涵盖文本输出、变量解析、格式控制及高级技巧&#xff0c;助力提升Shell脚本开发与终端操作效率。 一、核心功能与定位 作为Shell脚本开发的基础工具&#xff0c;echo命令承担着信息输出与数据传递的重要角色。其主要功能包…

Windows系统下 NVM 安装 Node.js 及版本切换实战指南

以下是 Windows 11 系统下使用 NVM 安装 Node.js 并实现版本自由切换的详细步骤&#xff1a; 一、安装 NVM&#xff08;Node Version Manager&#xff09; 1. 卸载已有 Node.js 如果已安装 Node.js&#xff0c;请先卸载&#xff1a; 控制面板 ➔ 程序与功能 ➔ 找到 Node.js…

【leetcode】977. 有序数组的平方

有序数组的平方 题目代码1. 使用sorted2. 双指针 题目 977. 有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输…

Obsidian 数据可视化深度实践:用 DataviewJS 与 Charts 插件构建智能日报系统

Obsidian 数据可视化深度实践&#xff1a;用 DataviewJS 与 Charts 插件构建智能日报系统 一、核心架构解析 本系统基于 Obsidian 的 DataviewJS 和 Charts 插件&#xff0c;实现日报数据的自动采集、可视化分析及智能回溯功能&#xff08;系统架构原理见&#xff09;。其技术…

深入解析Spring Boot与Kafka集成:构建高效消息驱动应用

深入解析Spring Boot与Kafka集成&#xff1a;构建高效消息驱动应用 引言 在现代分布式系统中&#xff0c;消息队列是实现异步通信和解耦的关键技术之一。Apache Kafka作为一款高性能、分布式的消息队列系统&#xff0c;广泛应用于大数据和实时数据处理场景。本文将详细介绍如…

Rust 学习笔记:关于生命周期的练习题

Rust 学习笔记&#xff1a;关于生命周期的练习题 Rust 学习笔记&#xff1a;关于生命周期的练习题生命周期旨在防止哪种编程错误&#xff1f;以下代码能否通过编译&#xff1f;若能&#xff0c;输出是&#xff1f;如果一个引用的生命周期是 static&#xff0c;这意味着什么&…

word解决不同文档同样的字体段落设置下看起来行距不同的问题

问题&#xff1a; 有时候我们照着模板修改文档格式&#xff0c;明明字体和段落设置一模一样&#xff0c;但是看起来行距不一样。 解决办法&#xff1a; 一般照着模板修改文档内容&#xff0c;要注意以下几点&#xff0c;如果以下几点与模板设置相同时就可解决上述问题 1、纸…

Jenkins实践(9):配置“构建历史的显示名称,加上包名等信息“

Jenkins实践(9):配置“构建历史的显示名称,加上包名等信息“ 版本:Jenkins 4.262.2 需求:想要在构建历史中展示,本次运行的是哪个版本或哪个包 操作步骤: 1、先安装插件Build Name and Description Setter 2、Set Build Name 3、构建历史处查看展示 插件特性说明 安装依赖…

matIo库及.mat数据格式介绍

一.概述 1..mat数据格式 &#xff08;1&#xff09;.mat 是 MATLAB 软件的标准二进制数据存储格式&#xff0c;用于保存变量、矩阵、数组、结构体等数据类型。其名称源于 “MATLAB Data” 的缩写&#xff0c;最初设计为高效存储和加载 MATLAB 环境中的数据&#xff0c;后来逐…

企业级调度器LVS (面试版)

1. 什么是 LVS?有什么作⽤? LVS ( Linux Virtual Server )是⼀个基于 Linux 内核实现的⾼性能、可扩展和可靠的负载均衡。它将多个服务器组成⼀个⾼可⽤、⾼性能和⾼可靠的虚拟服务器集群,通过将客户端的请求转发到不同的后端服务器,实现负载均衡和⾼可⽤性。 2.什么是 …

用python制作一个简易的聊天室软件

文章目录 效果图python源码使用说明效果图 只需要一百多行的python代码,就能制作一个简易的聊天室软件。效果如下: 操作说明: 1、先运行server.py启动服务器; 2、每运行一次client.py可以创建一个聊天用户(需要输入用户昵称); 3、输入对方的昵称即可与其聊天,输入“a…

Android13 开机时间优化

前言 在实际应用场景中&#xff0c;特定领域对 Android 系统的启动时间有着极为严苛的要求&#xff0c;车载领域便是典型代表。想象一下&#xff0c;当车辆已经行驶出数公里之遥&#xff0c;车内的信息娱乐系统&#xff08;IVI&#xff09;却仍未完成启动&#xff0c;这无疑会…

08SpringBoot高级--自动化配置

目录 Spring Boot Starter 依赖管理解释 一、核心概念 二、工作原理 依赖传递&#xff1a; 自动配置&#xff1a; 版本管理&#xff1a; 三、核心流程 四、常用 Starter 示例 五、自定义 Starter 步骤 创建配置类&#xff1a; 配置属性&#xff1a; 注册自动配置&a…

基于cornerstone3D的dicom影像浏览器 第二十四章 显示方位、坐标系、vr轮廓线

系列文章目录 文章目录 系列文章目录前言一、工具栏修改二、切片窗口显示方位文字1. 修改mprvr.js&#xff0c;添加函数getOrientationMarkers2. 修改DisplayerArea3D.vue 三、vr窗口显示坐标系1. 修改mprvr.js 添加OrientationMarkerTool2. view3d.vue中响应工具栏事件3. 修改…

【C/C++】线程局部存储:原理与应用详解

文章目录 1 基础概念1.1 定义1.2 初始化规则1.3 全局TLS vs 局部静态TLS 2 内存布局2.1 实现机制2.2 典型内存结构2.3 性能特点 3 使用场景/用途3.1 场景3.2 用途 4 注意事项5 对比其他技术6 示例代码7 建议7.1 调试7.2 优化 8 学习资料9 总结 在 C 多线程编程中&#xff0c;线…

【图像大模型】IP-Adapter:图像提示适配器的技术解析与实践指南

IP-Adapter&#xff1a;图像提示适配器的技术解析与实践指南 一、项目背景与技术价值1.1 图像生成中的个性化控制需求1.2 IP-Adapter的核心贡献 二、技术原理深度解析2.1 整体架构设计2.2 图像特征编码器2.3 训练策略 三、项目部署与实战指南3.1 环境配置3.2 模型下载3.3 基础生…

MySQL-5.7 修改密码和连接访问权限

一、MySQL-5.7 修改密码和连接权限设置 修改密码语法 注意&#xff1a;rootlocalhost 和 root192.168.56.% 是两个不同的用户。在修改密码时&#xff0c;两个用户的密码是各自分别保存&#xff0c;如果两个用户密码设置不一样则登陆时注意登陆密码 GRANT ALL PRIVILEGES ON …