如何给Nginx配置访问IP白名单
一、Nginx配置访问IP白名单
有时部署的应用需要只允许某些特定的IP能够访问,其他IP不允许访问,这时,就要设置访问白名单;
设置访问白名单有多种方式:
1.通过网络防火墙配置,例如阿里云/华为云管理平台
2.通过服务器防火墙配置,iptables
3.通过nginx配置访问分发限制
4.通过nginx的allow、deny参数进行访问限制(本文使用此方案)
Nginx白名单使用allow和deny来控制,该配置可以添加在http段,也可以server、location中
如果想增加允许访问的IP范围,例如10.10.10.0~10.10.10.255,需要使用CIDR格式表示你的IP范围,在Nginx中默认仅允许IP地址和CIDR格式,CIDR转IPv4网站:https://www.ipaddressguide.com/cidr
示例一
nginx所有代理生效,仅允许192.168.1.6的访问,其他所有IP均不能访问。
http {
......
allow 192.168.1.6;
deny all;
......
}
示例二
nginx某个端口server代理生效,仅允许192.168.1.6和192.168.1.6的访问,其他所有IP均不能访问。
server {
......
allow 192.168.1.6;
allow 192.168.1.8;
deny all;
......
}
示例三
nginx某个location代理生效,仅允许192.168.1.6和192.168.2.0~192.168.2.255网段的访问,其他所有IP均不能访问。
location /screen {
......
allow 192.168.1.6;
allow 192.168.2.0/24;
deny all;
......
}
修改完成后,重载nginx配置文件生效:sbin/nginx -s reload
注意:如果本机也需要访问这个代理,记得加上allow 127.0.0.1;
配套操作:互联网上,一般访问端client的IP都不是本机的局域网IP,而是运营商的出口IP,需要注意;
查询方法:百度或者搜狗,输入关键词“IP”,然后点击“IP地址查询”相关搜索结果,即可查询到自己的IP。
不确定或者不能访问外网的话,就在nginx的报错日志里找,logs/error.log,能找到访问此nginx的IP。
二、Nginx添加白名单的四种方式
1)添加防火墙白名单
针对nginx域名配置所启用的端口(比如80端口)在iptables里做白名单,比如只允许100.110.15.16、100.110.15.17、100.110.15.18访问.但是这样就把nginx的所有80端口的域名访问都做了限制,范围比较大!

2)利用$remote_addr参数进行访问的分发限制
如果只是针对nginx下的某一个域名进行访问的白名单限制,那么可以在nginx的配置文件里进行设置,如下:
##白名单设置,只允许下面三个来源ip的客户端以及本地能访问该站。主要是下面这三行if ($remote_addr !~ ^(100.110.15.16|100.110.15.17|100.110.15.18|127.0.0.1)) {rewrite ^.*$ /maintence.php last;}

3)也可以使用$http_x_forwarded_for参数进行访问的分发限制,如下:
##白名单设置,只允许下面三个来源ip的客户端以及本地能访问该站。if ($http_x_forwarded_for !~ ^(100.110.15.16|100.110.15.17|100.110.15.18|127.0.0.1)) {rewrite ^.*$ /maintence.php last;}

4)还可以利用nginx的allow、deny参数进行访问限制
##白名单设置,只允许下面三个来源ip的客户端以及本地能访问该站。allow 100.110.15.16;allow 100.110.15.17;allow 100.110.15.18;allow 127.0.0.1;deny all;

三、Nginx根据用户IP设置访问跳转
第一种方法
根据$remote_addr客户端IP地址判断,判断成功即返回301跳转,可以写正则,如果有大量不规则IP就很头疼了。
if ($remote_addr = 192.168.1.123) {return 301 https://blog.whsir.com;
}
第二种方法
nginx通过lua实现,这方法是孔大神给的,将需要做301跳转的IP,直接写到/tmp/ip文件中,支持网段,一行一个,添加后不需要重启nginx,即时生效。
注意nginx要编译lua模块才可以使用,我的whsir一键包nginx已集成lua。
rpm -ivh http://mirrors.whsir.com/centos/whsir-release-centos.noarch.rpmyum install wnginx -y
set_by_lua $info 'local opt = ngx.var.remote_addrlocal file = io.popen("ip=" ..opt.. ";if grep -q $ip /tmp/ip;then echo $ip; exit 0;fi ; for net in $(grep / /tmp/ip);do [ $(ipcalc -n $ip/${net#*/}) = $(ipcalc -n $net) ] && echo $ip && break; done")content1 = file:read("*l")return content1';if ( $info = $remote_addr) {return 301 https://blog.whsir.com;}
四、nginx配置IP白名单的详细步骤
分析nginx访问日志,有哪些IP访问过nginx。
命令参考:
awk '{print $1}' logs/access.log | sort | uniq -c | sort -nr -k1
输出的效果案例:
1053 192.168.3.15
893 192.168.3.10
818 192.168.0.8
1、添加IP白名单文件
在nginx目录的 conf 中添加文件 ip.conf,注意白名单文件不用添加任何注释,可以有空行
vi ip.conf
192.168.3.11 1;192.168.3.10 1;
192.168.0.112 1;
2、配置nginx.conf
编辑http节点:
http {# ...# geo IP whitelistgeo $remote_addr $ip_whitelist {default 0;include ip.conf;}# ...}
编辑server节点:
server {listen 80;# ...# IP whitelistset $whitelist_flag 1;if ( $ip_whitelist != 1 ) {set $whitelist_flag "${whitelist_flag}0";}if ( $request_uri !~* '/warn_navigate_page' ) {set $whitelist_flag "${whitelist_flag}0";}if ( $whitelist_flag = "100" ) {#return 403;rewrite ^(.*)$ $scheme://$host:$server_port/warn_navigate_page break; #白名单的提示页面}# ...}
也可以在location节点中编辑,示例:
编辑location节点:
location /test {proxy_pass http://IP/test;# ...# IP whitelistset $whitelist_flag 1;if ( $ip_whitelist != 1 ) {set $whitelist_flag "${whitelist_flag}0";}if ( $request_uri !~* '/warn_navigate_page' ) {set $whitelist_flag "${whitelist_flag}0";}if ( $whitelist_flag = "100" ) {#return 403;rewrite ^(.*)$ $scheme://$host:$server_port/warn_navigate_page break; #白名单的提示页面}# ...}
添加导航的提示页 /warn_navigate_page
server {listen 80;# ...# 白名单的提示导航页面location /warn_navigate_page {root /home/java/nginx/bizapp/warn_navigate_page;index warn_navigate_page.html warn_navigate_page.htm;rewrite ^(.*)$ /warn_navigate_page.html break;}}
3、编辑白名单的提示导航页面
在 /home/java/nginx/bizapp/warn_navigate_page 中编辑页面warn_navigate_page.html
参考:
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no"><meta content="yes" name="apple-mobile-web-app-capable"><meta content="black" name="apple-mobile-web-app-status-bar-style"><meta content="telephone=no" name="format-detection"><meta content="email=no" name="format-detection"><title>系统通知</title><style type="text/css">body {background: url(https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png) no-repeat;background-size: 100% 100%;background-attachment: fixed;}</style></head><body><div><pre> 【通知公告】尊敬的用户您好,系统已不提供IP地址直接访问,请联系管理员添加白名单。互联网的域名访问地址:<a href="https://www.baidu.com">跳转https://www.weidianyuedu.com</a></pre></div></body><script type="text/javascript"></script></html>
参考:https://blog.csdn.net/wanzhong11/article/details/131396910
https://blog.csdn.net/hdxx2022/article/details/132020861
https://blog.whsir.com/post-4430.html
相关文章:
如何给Nginx配置访问IP白名单
一、Nginx配置访问IP白名单 有时部署的应用需要只允许某些特定的IP能够访问,其他IP不允许访问,这时,就要设置访问白名单; 设置访问白名单有多种方式: 1.通过网络防火墙配置,例如阿里云/华为云管理平台 2.…...
【VIM】VIM配合使用的工具
6-1 课程总结-vim虐我千百遍,我待 vim 如初恋_哔哩哔哩_bilibili...
git你学“废”了吗?——git本地仓库的创建
git你学“废”了吗?——git本地仓库的创建😎 前言🙌初识gitgit 本地仓库的创建1、基于centos7环境下 git的下载2、设置自己的用户名和邮箱 查看.git中的结构区分清楚版本库和工作区 查看git中的相关内容查看仓库的状态 总结撒花💞…...
AWS Lambda Golang HelloWorld 快速入门
操作步骤 以下测试基于 WSL2 Ubuntu 22.04 环境 # 下载最新 golang wget https://golang.google.cn/dl/go1.21.1.linux-amd64.tar.gz# 解压 tar -C ~/.local/ -xzf go1.21.1.linux-amd64.tar.gz# 配置环境变量 PATH echo export PATH$PATH:~/.local/go/bin >> ~/.bashrc …...
【C++】单例模式
文章目录 一. 介绍二. 饿汉模式三. 懒汉模式四. 饿汉模式和懒汉模式对比 一. 介绍 单例模式是属于设计模式的一种,那什么是设计模式呢? 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总…...
【kubernetes】使用luakube访问kubernetes api
文章目录 1 kubernetes client2 luakube初体验3 luakube代码分析4 luakube包的调用5 lua相关5.1 self5.2 metatable5.2.1 使用metatable对table新增操作符5.2.2 使用metatable对table新增方法5.2.3 再探luakube 6 参考文档 1 kubernetes client 客户端列出了各种语言对应的访问…...
【算法分析与设计】贪心算法(下)
目录 一、单源最短路径1.1 算法基本思想1.2 算法设计思想1.3 算法的正确性和计算复杂性1.4 归纳证明思路1.5 归纳步骤证明 二、最小生成树2.1 最小生成树性质2.1.1 生成树的性质2.1.2 生成树性质的应用 2.2 Prim算法2.2.1 正确性证明2.2.2 归纳基础2.2.3 归纳步骤2.3 Kruskal算…...
Arm Cache学习资料大汇总
关键词:cache学习、mmu学习、cache资料、mmu资料、arm资料、armv8资料、armv9资料、 trustzone视频、tee视频、ATF视频、secureboot视频、安全启动视频、selinux视频,cache视频、mmu视频,armv8视频、armv9视频、FF-A视频、密码学视频、RME/CC…...
Docker 学习总结(79)—— Dockerfile 编写技巧总结
目标 更快的构建速度 更小的 Docker 镜像大小 更少的 Docker 镜像层 充分利用镜像缓存 增加 Dockerfile 可读性 让 Docker 容器使用起来更简单 总结 编写 .dockerignore 文件 容器只运行单个应用 将多个 RUN 指令合并为一个 基础镜像的标签不要用 latest 每个 RUN 指令后删除多…...
链表经典面试题(二)
返回中间结点 1.中间结点的题目2.中间结点的图文分析3.中间结点的基本代码4.中间结点的优化代码 1.中间结点的题目 2.中间结点的图文分析 方法1:先求整体长度,再除以2,所得到的就是中间结点 方法2:双指针法,快指针走两…...
89、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->Zset 相关命令
本次讲解要点: ** Set相关命令:是指value中的数据类型** 启动redis服务器: 打开小黑窗: C:\Users\JH>e: E:>cd E:\install\Redis6.0\Redis-x64-6.0.14\bin E:\install\Redis6.0\Redis-x64-6.0.14\bin>redis-server.exe …...
知识图谱02——使用python将信息录入neo4j
将文档传入chatgpt,生成对应的cypher语句 链接: https://pan.baidu.com/s/1Ny-ttbBSpqYEigwYiCWMeA?pwdc7sc 提取码: c7sc 使用命令行安装对应的包 pip install neo4jchatgpt生成出的txt文档中的内容如下: MERGE (Node1:Entity {name: 原始舱单提运单…...
greenDAO-Android轻量级快速ORM框架
官网 https://github.com/greenrobot/greenDAO 简介 greenDAO is a light & fast ORM for Android that maps objects to SQLite databases. Being highly optimized for Android, greenDAO offers great performance and consumes minimal memory. Home page, documen…...
结构型设计模式——组合模式
摘要 组合模式(composite pattern): 允许你将对象组合成树形结构来表现"整体/部分"层次结构. 组合能让客户以一致的方式处理个别对象以及对象组合。 一、组合模式的意图 将对象组合成树形结构来表示“整体/部分”层次关系,允许用户以相同的方式处理单独…...
40. 组合总和 II
给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 示例 1: 输入: candidates [10,1,2,7,6,1,5…...
安卓玩机-----给app加注册码 app加弹窗 云注入弹窗
在对接很多工作室业务中有些客户需要在他们自带的有些app中加注册码或者验证码的需求。其实操作起来也很简单。很多反编译软件有自带的注入功能。例如注入弹窗。这个是需要对应的注册码来启动应用。而且是随机id。重新安装app后需要重新注册才可以继续使用,原则上可…...
NLP的不同研究领域和最新发展的概述
一、介绍 作为理解、生成和处理自然语言文本的有效方法,自然语言处理 (NLP) 的研究近年来迅速普及并被广泛采用。鉴于NLP的快速发展,获得该领域的概述和维护它是困难的。这篇博文旨在提供NLP不同研究领域的结构化概述,…...
1.物联网射频识别,RFID概念、组成、中间件、标准,全球物品编码——EPC码
1.RFID概念 RFID是Radio Frequency Identification的缩写,又称无线射频识别,是一种通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需与被识别物体建立机械或光学接触。 RFID(Radio Frequency Identificati…...
MySQL函数与控制结构
MySQL数据库管理系统在数据存储和检索方面发挥着重要作用。除了基础的数据操作外,MySQL还提供了丰富的函数和控制结构来进行更复杂的数据处理。 本文将详细介绍如何在MySQL中使用begin-end语句块、自定义函数、以及各种控制语句。通过《三国志》游戏数据的实例将更深入地了解…...
【论文极速读】Prompt Tuning——一种高效的LLM模型下游任务适配方式
【论文极速读】Prompt Tuning——一种高效的LLM模型下游任务适配方式 FesianXu 20230928 at Baidu Search Team 前言 Prompt Tuning是一种PEFT方法(Parameter-Efficient FineTune),旨在以高效的方式对LLM模型进行下游任务适配,本…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...
