Nginx 安全防护与HTTPS部署
目录
一、核心安全配置
1、隐藏版本号
2、限制危险请求方法
3、请求限制(CC攻击防御)
(1)使用Nginx的limit_req模块限制请求速率
(2)压力测试验证
4、防盗链
(1)修改 Windows 的C:\Windows\System32\drivers\etc\hosts 文件,设置域名和 IP 映射关系
(2)修改两台 OpenEuler 的 hosts 文件,设置域名和 IP 映射关系
(3)把图片 kgc.png 放到源主机的工作目录下
(4)编辑原网站首页文件
(5)测试访问源网站
(6)编辑岛链网站首页文件
(7)测试访问盗链网站(盗链成功)
(8)配置Nginx防盗链
(9)测试访问呢盗链网站(盗链失败403)
二、高级防护
1、动态黑名单
(1)编辑黑名单配置文件
(2)编辑主配置文件
(3)使用封禁ip 测试访问
(4)自动添加黑名单
2、nginx https 配置
(1)HTTP 风险
(2)安全通信的四大原则
(3)HTTPS 通信原理简述
3、nignx 配置https 证书
(1)使用 openssl 生成证书和私钥生成证书和私钥
(2)nginx 启用https
(3)验证
一、核心安全配置
1、隐藏版本号
在生产环境中,需要隐藏 Nginx 的版本号,以避免泄漏 Nginx 的版本,使攻击者不能针对特定版本进行攻击。在隐藏版本号之前,可以使用 Fiddler 工具抓取数据包,查看 Nginx版本,也可以在 OpenEuler 中使用命令 curl -Ihttp://192.168.10.101/查看
修改配置文件
[root@bogon ~]# vim /usr/local/nginx/conf/nginx.confserver_tokens off; #第20行添加,隐藏版本号
[root@bogon ~]# nginx -t #查看文件是否有错误
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@bogon ~]# systemctl restart nginx #重启
再次查看会发现版本号被隐藏
2、限制危险请求方法
不安全的请求方式,是潜在的安全风险,TRACE(易引发XST攻击)、PUT/DELETE(文件修改风险)、CONNECT(代理滥用),通过正则表达式匹配请求方法,非白名单方法返回 444(无响应关闭连接)
修改配置文件
[root@bogon ~]# vim /usr/local/nginx/conf/nginx.confserver {……if ($request_method !~ ^(GET|HEAD|POST)$ ) {return 444;}……}
[root@bogon ~]# nginx -t
[root@bogon ~]# systemctl restart nginx
测试PUT/DELETE请求
[root@localhost ~]# curl -XPUT -I 192.168.10.101
curl: (52) Empty reply from server
[root@bogon ~]# cat /usr/local/nginx/logs/access.log
192.168.10.102 - - [06/May/2025:12:17:52 +0800] "PUT / HTTP/1.1" 444 0 "-" "curl/8.4.0"
3、请求限制(CC攻击防御)
CC 攻击(Challenge Collapsar 攻击)是一种常见的网络攻击方式,通过大量合法或伪造的小流量请求来耗尽服务器资源,导致正常用户无法访问网站。
CC攻击,也称为连接数攻击或请求速率限制攻击,通过模拟大量用户访问来消耗服务器资源,从而使得正常用户无法正常访问网站。为了防止此类攻击,可以使用 Nginx 提供的模块来限制请求速率和并发连接数
(1)使用Nginx的limit_req模块限制请求速率
[root@bogon ~]# vim /usr/local/nginx/conf/nginx.conf
http {limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;#34,定义限制区(10MB内存/每秒10请求)server {location / {root html;index index.html index.htm;limit_req zone=req_limit burst=20 nodelay;}}
}
关键参数说明:
limit_req_zone | 定义共享内存区 |
$binary_remote _addr | 是一个内置变量,用于表示客户端 IP 地址的二进制格式 |
zone=req_limit:10m | 创建名为 req_limit 的共享内存区,大小 10M,用来存储客户端IP |
rate=10r/s | 限制并发数,每个 IP 每秒可以发起的请求次数 |
limit req | 实施速率限制 |
zone=req limit | 绑定到预定义的共享内存区 |
burst=20 | 类似与等候区,超出并发数的请求会到等候区,等候区占满后,多余的请求会立刻返回 503 |
nodelay | 立即处理突发请求而不延迟,相当于立即处理等候区的请求,多余的请求会立刻返回 503 |
(2)压力测试验证
安装 ab 测试工具
ApacheBench(简称 ab)是 Apache HTTP 服务器自带的一个轻量级、易用的HTTP 服务器性能测试工具。它主要用于评估服务器在并发访问下的性能表现,包括响应时间、吞吐量等关键指标。
[root@bogon ~]# dnf -y install httpd-tools
发起测试请求
[root@bogon ~]# ab -n 300 -c 30 http://192.168.10.101/
-n 300:表示总请求数为 300 次,即模拟客户端向服务器发送300次HTTP 请求。
-c 30:表示并发用户数为 30,即同时有30个请求并行发送到服务器
查看access.log发现大量请求日志状态码 503
[root@bogon ~]# tail -300 /usr/local/nginx/logs/access.log | grep -c 503
278
4、防盗链
防盗链是一种重要的安全设置,旨在防止未经授权的用户盗用网站(静态)资源。盗链行为不仅侵犯了内容创作者的版权,还可能导致原网站带宽和资源的过度消耗,影响正常用户的访问速度和体验。
一般来说,用户浏览一个完整的页面并不是一次性全部传送到客户端的。如果所请求的页面带有图片或其他信息,那么第一个 HTTP 请求传送的是这个页面的文本,然后通过客户端的浏览器对这段文本进行解释执行。如果发现其中还有图片,那么客户端的浏览器会再次发送一条HTTP请求,当这个请求被处理后这个图片文件才会被传送到客户端,最后浏览器会将图片安放到页面的正确位置,就这样一个完整的页面要经过多次发送HTTP请求才能够被完整的显示。基于这样的机制,就会产生盗链问题:如果一个网站中没有其页面中所说图片信息,那么它完全可以链接到其他网站的图片信息上。这样,没有任何资源的网站利用了其他网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。
本实验需要两台主机
OpenEuler | www.aaa.com | 192.168.10.101 | 源主机 |
OpenEuler | www.bbb.com | 192.168.10.102 | 盗链主机 |
(1)修改 Windows 的C:\Windows\System32\drivers\etc\hosts 文件,设置域名和 IP 映射关系
192.168.10.101 www.aaa.com
192.168.10.102 www.bbb.com
(2)修改两台 OpenEuler 的 hosts 文件,设置域名和 IP 映射关系
[root@bogon ~]# vim /etc/hosts
192.168.10.101 www.aaa.com
192.168.10.102 www.bbb.com
(3)把图片 kgc.png 放到源主机的工作目录下
[root@bogon ~]# ls /usr/local/nginx/html/
50x.html index.html kgc.png
(4)编辑原网站首页文件
[root@bogon ~]# vim /usr/local/nginx/html/index.html
<h1>aaa</h1>
<img src="kgc.png"/>
(5)测试访问源网站
(6)编辑岛链网站首页文件
[root@bogon ~]# dnf -y install httpd
[root@bogon ~]# vim /var/www/html/index.html
<h1>bbb</h1>
<img src="http://www.aaa.com/kgc.png"/>
[root@bogon ~]# systemctl stop firewalld
[root@bogon ~]# systemctl start httpd
(7)测试访问盗链网站(盗链成功)
(8)配置Nginx防盗链
[root@bogon ~]# vim /usr/local/nginx/conf/nginx.conflocation ~* \.(gif|jpg|jpeg|png|bmp|swf)$ {root html;valid_referers aaa.com *.aaa.com;if ($invalid_referer) { return 403;}}
[root@bogon ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@bogon ~]# systemctl restart nginx
~* \.(jpglgif|swf)$ | 这段正则表达式表示匹配不区分大小写,以.jpg或. gif 或.swf 结尾的文件; |
Valid referers | 设置信任的网站,可以正常使用图片 |
后面的网址或者域名 | referer 中包含相关字符串的网址 |
If 语句 | 如果链接的来源域名不在 valid referers 所列出的列表中,$invalid referer 为1,则执行后面的操作,即进行重写或返回 403 页面。 |
(9)测试访问呢盗链网站(盗链失败403)
二、高级防护
1、动态黑名单
动态黑名单是 Nginx 中一种实时拦截恶意请求的安全机制,它允许在不重启服务的情况下,动态更新需要封禁的 IP地址或网段。相比静态配置的 allow/deny指令,动态黑名单更灵活高效,适用于高并发、多变的攻击防护场景。
(1)编辑黑名单配置文件
[root@bogon ~]# vim /usr/local/nginx/conf/blockips.conf
192.168.1.0/24 1; #封禁整个网段
192.168.10.102 1; #封禁ip
IP 地址后的数字含义:
0 | 允许 | |
1 | 403 | 完全封禁 |
2 | 444 | 静默断开 |
3 | 503 | 服务不可用 |
(2)编辑主配置文件
[root@bogon ~]# vim /usr/local/nginx/conf/nginx.conf
http {
……geo $block_ip {default 0; #默认允许访问include /usr/local/nginx/conf/blockips.conf; #包含黑名单}
……server {
……if ($block_ip) { #判断标记值return 403; #封禁动作}
……}
}
geo | Nginx 内置模块指令,专门用于处理IP地址相关的逻辑。基于客户端IP 地址生成一个变量值,用于后续的访问控制判断 |
$block_ip | 自定义的变量名,存储计算结果(通常为0或1)。 |
default 0 | 默认值,表示不在黑名单中的 IP 允许访问 |
if($block ip) | 当变量值为1时触发封禁逻辑 |
[root@bogon ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@bogon ~]# systemctl restart nginx
(3)使用封禁ip 测试访问
(4)自动添加黑名单
[root@bogon ~]# awk '{print $1}' /usr/local/nginx/logs/access.log | sort | uniq -c | sort -nr | awk '{if ($1>100) print $2" 1;"}' > /usr/local/nginx/conf/blockips.conf
uniq -c:统计连续出现的次数,并在行首显示次数
sort -nr:按数值排序
2、nginx https 配置
(1)HTTP 风险
HTTP 由于是明文传输,主要存在三大风险:窃听风险、篡改风险、冒充风险。
- 窃听风险:中间人可以获取到通信内容,由于内容是明文,所以获取明文后有安全风险
- 篡改风险:中间人可以篡改报文内容后再发送给对方,风险极大。
- 冒充风险:比如你以为是在和某宝通信,但实际上是在和一个钓鱼网站通信。
(2)安全通信的四大原则
- 机密性:即对数据加密,解决了窃听风险,因为即使被中间人窃听,由于数据是加密的,他也拿不到明文;
- 完整性:指数据在传输过程中没有被篡改,不多不少,保持原样,中途如果哪怕改了一个标点符号,接收方也能识别出来,从来判定接收报文不合法;
- 身份认证:确认对方的真实身份,即证明“你妈是你妈”的问题,这样就解决了冒充风险,用户不用担心访问的是某宝结果却在和钓鱼网站通信的问题;
- 不可否认:即不可否认已发生的行为,比如小明向小红借了1000元,但没打借条,或者打了借条但没有签名,就会造成小红的资金损失。
(3)HTTPS 通信原理简述
- 对称加密:通信双方使用同一把密钥进行加解密,效率高但存在密钥协商难题。若通过报文传输密钥,易被中间人截获替换,导致后续通信内容被窃取和篡改。
- 非对称加密:加解密使用不同密钥,公钥可公开,私钥保密。服务器保管私钥并发布公钥,客户端用公钥加密对称加密密钥(或相关信息)传给服务器,解决了密钥传输安全问题,但服务器的公钥传输又面临被中间人调包风险。
数字证书解决公钥信任问题:
证书申请与构成:服务器向证书颁发机构(CA)申请证书,提交域名、组织单位信息和公钥等生成证书签名请求(CSR) ,CA 据此生成证书,包含证书序列号、过期时间、站点信息、公钥、颁发者名称和签名等内容。
证书验证与通信流程:客户端收到服务器的证书后,用系统内置的 CA 证书公钥验签。验签通过则表明证书可信,其公钥也可信。客户端用该公钥加密会话密钥(对称加密密钥)发送给服务器,服务器用私钥解密获取会话密钥,之后双方使用对称加密进行数据传输。
HTTPS 加密模式:握手阶段采用非对称加密,用于安全交换对称加密密钥;数据传输阶段使用对称加密,因其密钥管理简便、加密解密效率高,这种混合模式既保障安全又兼顾性能。
3、nignx 配置https 证书
由于 ss1 证书需要向 CA 组织申购,实验采用自签名证书(也就是自己给自己签名并颁发证书,当然这种证书是不被信任的)
(1)使用 openssl 生成证书和私钥生成证书和私钥
[root@localhost ~]# mkdir -p /etc/nginx/ssl
[root@localhost ~]# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt -subj "/C=CN/ST=BeiJing/L=BeiJing/O=benet/CN=localhost"
.+......+++++++++++++++++++++++++++++++++++++++*..+.....+...+.......+++++++++++++++++++++++++++++++++++++++*..+...+.......+...+..+.......+.....+.+..+...+....+.....+......+....+.....+......+......+...+.......+...+.....+...+.........+................+...+..+.........+...+...+.......+...+...+.........+......+.....+.+...............+.....+......+...+......+....+..+...+.......+..+.+......+.....+...+.......+...+........+.........+................+........+......+......+.........+.............+.....+.+...........+...+.+............+...+..+...+.........+.+......+.....+.+...+..+.......+..+.........+..........+.........+..+..........+...+........+...+.......+...............+...+......+.....+......+.........+.+..................+.........+.....+............+....+..+....+........+...+...+.........+......+.+.....+.+...+.....+.......+...............+........+....+...+..+.......+...+..+......+....+.....................+.........+...........+....+.....+.+........+.......+.....+...............+....+...........+..........+...+.....+.+...+...+..+................+.....+....+..+...+.............+...............+..+.+..+..................+.........+...+...+.+...+..+.+..+.............+..+.+.....+....+........+.............+..+...+......+....+.........+..+...+.+..............+...+.........+....+......+........+......+.+.....+...+...+....+..................+...+....................+...+.+...+......+.........+..+.+.........+.....+...+.+..+..........+........+.+.........+.....+.......+..+...+.......+..+.........+....++++++
.....+++++++++++++++++++++++++++++++++++++++*...+...+++++++++++++++++++++++++++++++++++++++*.+..+.+......+.....+...+.......+.....+.+........................+...+...........+......+......+....+.....+....+..+...+....+....................+......+.......+..+......+.+...............+...+...+..............+....+......+...+.....+.+.........+.....+...+...+.......+..+......+.+......+.....+.......+..+.....................+...+....+.................+....+......+......+...+......+.....+.+..+...............+.+......+......+..............+.........+.......+..+.+...........+....+..+.......+........+....+...+..+.+...+.....+..........+......+...+...+..............+.............+..++++++
-----
参数解释:
-x509 | 生成自签名证书(而非CSR) |
-nodes | 不加密私钥(无密码保护)。 |
-days 365 | 证书有效期1年。 |
-keyout | 私钥文件。 |
-out | 自签名文件。 |
-newkey rsa:2048 | 生成2048 位的 RSA 私钥。 |
-subj | 证书主题信息(按需修改字段) |
注:
CA 签名证书:需要由受信任的第三方证书颁发机构(CA)签发。流程如下:
1.用户生成私钥和 CSR(证书签名请求)。
2.将 CSR 提交给 CA(如Let's Encrypt、DigiCert 等)。
3.CA 机构验证身份后,用CA的私钥对证书签名,生成最终证书。
自签名证书:证书的颁发者(Issuer)和主体(Subject)是同一个实体(即自己)无需第三方 CA 参与,直接用工具(如 0penSSL)生成私钥和证书。签名时使用自己的私钥,而不是 CA的私钥。适用于测试、内部环境或无需公开信任的场景。
(2)nginx 启用https
编辑nginx 配置文件
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
server {listen 443 ssl; #监听HTTPS端口server_name localhost;#指定证书和私钥路径ssl_certificate /etc/nginx/ssl/nginx.crt;ssl_certificate_key /etc/nginx/ssl/nginx.key;
}
#重定向server {listen 80; return 301 https://$host$request_uri;}
[root@localhost ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# systemctl restart nginx
(3)验证
访问https://服务器ip
浏览器会提示证书不安全(因自签名),选择“高级’”--继续前往或信任此证书(测试环境可忽略警告)。
相关文章:
Nginx 安全防护与HTTPS部署
目录 一、核心安全配置 1、隐藏版本号 2、限制危险请求方法 3、请求限制(CC攻击防御) (1)使用Nginx的limit_req模块限制请求速率 (2)压力测试验证 4、防盗链 (1)修改 Window…...
Python爬虫+代理IP+Header伪装:高效采集亚马逊数据
1. 引言 在当今大数据时代,电商平台(如亚马逊)的数据采集对于市场分析、竞品监控和价格追踪至关重要。然而,亚马逊具有严格的反爬虫机制,包括IP封禁、Header检测、验证码挑战等。 为了高效且稳定地采集亚马逊数据&am…...
效率提升利器:解锁图片处理新姿势
今天我给大家分享一款超实用的图片压缩软件,好用程度超出想象!该软件身形 “轻盈”,仅 648KB,启动后能迅速上手。 01 软件介绍 这款软件就是PicSizer,具有以下特点: 支持windows系统 体积小,绿…...
【强化学习】什么是强化学习?2025
1. 强化学习简介 一句话总结:强化学习(Reinforcement Learning, RL)是一种机器学习范式,强调智能体(agent)通过与环境(environment)的交互,以试错(trial‑an…...
富文本编辑器的第三方库ProseMirror
如果0-1的开发一个富文本编辑器,成本还是非常高的,里面很多坑要踩,市面上很多库可以帮助我们搭建一个富文本编辑器,ProseMirror就是其中最流行的库之一。 认识ProseMirror ProseMirror 提供了一套工具和概念,用于构建…...
理解IP四元组与网络五元组:网络流量的“身份证”
理解IP四元组与网络五元组:网络流量的“身份证” 在现代网络通信中,IP四元组和网络五元组是流量识别、连接追踪、安全策略等核心的基础概念。理解这些“元组”不仅能够帮助我们更好地设计网络架构、排查故障,还能为安全与运维策略的落地提供…...
ROS2:话题通信CPP语法速记
目录 发布方实现流程重点代码 订阅方实现流程重点代码 参考代码示例发布方代码订阅方代码 发布方实现流程 包含头文件(rclcpp.hpp与[interfaces_pkg].hpp)初始化ROS2客户端(rclcpp::init)自定义节点类(创建发布实例,伺…...
码蹄集——直线切平面、圆切平面
MT1068 直线切平面 思路: 则 #include<bits/stdc.h> using namespace std;int main( ) {int n;cin>>n;cout<<n*(n1)/21;return 0; } MT1069圆切平面 n个圆最多把平面分成几部分?输入圆的数量N,问最多把平面分成几块。比如…...
2025年游戏行业DDoS攻防指南:智能防御体系构建与实战策略
2025年,游戏行业在全球化扩张与技术创新浪潮中,正面临前所未有的DDoS攻击威胁。攻击规模从T级流量到AI驱动的精准渗透,攻击手段从传统网络层洪水到混合型应用层打击,防御体系已从“被动应对”转向“智能博弈”。本文将结合最新攻击…...
LightGBM算法原理及Python实现
一、概述 LightGBM 由微软公司开发,是基于梯度提升框架的高效机器学习算法,属于集成学习中提升树家族的一员。它以决策树为基学习器,通过迭代地训练一系列决策树,不断纠正前一棵树的预测误差,逐步提升模型的预测精度&a…...
Nvidia发布Parakeet V2,一款新的开源自动语音识别模型
Nvidia 发布 Parakeet V2,一款新的开源自动语音识别 AI,核心亮点:一秒钟转录一小时的音频;Open ASR 上的顶级模型,击败了 ElevenLabs 的 Scribe 和 OpenAI 的 Whisper;6.05% 的单词错误率;CC-BY…...
浅析MySQL 的 **触发器(Trigger)** 和 **存储过程(Stored Procedure)原理及优化建议
MySQL 的 触发器(Trigger) 和 存储过程(Stored Procedure) 是数据库中用于实现业务逻辑的重要机制,它们的原理和使用方式不同,适用于不同的场景。 一、基本概念与原理 特性触发器(Trigger)存储过程(Stored Procedure)定义在表上定义,当特定事件(INSERT/UPDATE/DELE…...
网页版部署MySQL + Qwen3-0.5B + Flask + Dify 工作流部署指南
1. 安装MySQL和PyMySQL 安装MySQL # 在Ubuntu/Debian上安装 sudo apt update sudo apt install mysql-server sudo mysql_secure_installation# 启动MySQL服务 sudo systemctl start mysql sudo systemctl enable mysql 安装PyMySQL pip install pymysql 使用 apt 安装 My…...
人工智能与智能合约:如何用AI优化区块链技术中的合约执行?
引言:科技融合的新风口 区块链和人工智能,是当前最受瞩目的两大前沿技术。一个以去中心化、可溯源的机制重构信任体系,另一个以智能学习与决策能力重塑数据的价值。当这两项技术相遇,会碰撞出什么样的火花? 智能合约作…...
如何提升丢包网络环境下的传输性能:从 TCP 到 QUIC,再到 wovenet 的实践
在现代互联网环境中,稳定、可靠的网络连接对各种在线应用至关重要。然而,理想情况往往难以实现,特别是在以下一些典型场景中,网络丢包(packet loss) 常常发生: 一、常见的网络丢包场景 跨境通…...
Python 中的数据结构介绍
Python 是一种功能强大的编程语言,它内置了多种数据结构,以便用户能够方便、高效地存储、处理和访问数据。数据结构是组织和存储数据的方式,不同的数据结构适用于不同的应用场景。掌握 Python 中的基本数据结构,可以使代码更加简洁…...
数据中台架构设计
数据中台分层架构 数据采集层 数据源类型:业务系统(ERP、CRM)、日志、IoT 设备、第三方 API 等。采集方式: 实时采集:Kafka、Flink CDC(变更数据捕获)。离线采集:Sqoop、DataX&…...
基于SpringBoot网上书店的设计与实现
pom.xml配置文件 1. 项目基本信息(没什么作用) <groupId>com.spring</groupId> <!--项目组织标识,通常对应包结构--> <artifactId>boot</artifactId> <!--项目唯一标识--> <version>0.0.1-SNAPSHOT</ve…...
Vue3路由模式为history,使用nginx部署上线后刷新404的问题
一、问题 在使用nginx部署vue3的项目后,发现正常时可以访问的,但是一旦刷新,就是出现404的情况 二、解决方法 1.vite.config.js配置 在vite.config.js中加入以下配置 export default defineConfig(({ mode }) > {const isProduction …...
从单机到生产:Kubernetes 部署方案全解析
🚀 从单机到生产:Kubernetes 部署方案全解析 🌐 Kubernetes(k8s)是当今最流行的容器编排系统,广泛应用于开发、测试和生产环境。但不同的使用场景对集群规模、高可用性和资源需求有不同的要求。本文将带你…...
redis大全
1 redis安装和简介 基于ubuntu系统的安装 sudo apt update sudo apt install redis##包安装的redis 没有默认配置文件 启动 redis-server /path/to/your/redis.confredis-cliRedis 默认是没有设置用户和密码的,即可以无密码访问 设置密码的方法:可以通…...
C#经典算法面试题
C#经典算法面试题 递归算法 C#递归算法计算阶乘的方法 一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿卡曼引进这个表示法。 原理:亦即n!=123…(n-1)n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!n。…...
cephadm部署ceph集群
一、什么是Ceph? ceph是一个统一的、分布式的存储系统,设计初衷式提供较好的性能(io)、可靠性(没有单点故障)和可扩展性(未来可以理论上无限扩展集群规模),这三点也是集群架构所追求的。 “统一的”:意味着Ceph可以一套存储系统同时提供对象存储、块存…...
c#OdbcDataReader的数据读取
先有如下c#示例代码: string strconnect "DSNcustom;UIDsa;PWD123456;" OdbcConnection odbc new OdbcConnection(strconnect); odbc.Open(); if (odbc.State ! System.Data.ConnectionState.Open) { return; } string strSql "select ID from my…...
代码随想录训练营第十八天| 150.逆波兰表达式求值 239.滑动窗口最大值 347.前k个高频元素
150.逆波兰表达式求值: 文档讲解:代码随想录|150.逆波兰表达式求值 视频讲解:栈的最后表演! | LeetCode:150. 逆波兰表达式求值_哔哩哔哩_bilibili 状态:已做出 思路: 这道题目是让我们按照逆波…...
数据中台产品功能介绍
在数字化转型浪潮中,数据中台作为企业数据管理与价值挖掘的核心枢纽,整合分散数据资源,构建统一的数据管理与服务体系。本数据中台产品涵盖数据可视化、数据建设、数据治理、数据采集开发和系统管理五大平台,以丰富且强大的功能模…...
第四章-初始化Direct3D
首先我们需要一个错误检测和抛出机制 inline std::string ToString(const HRESULT& result) {char buffer[256];sprintf_s(buffer, "error code : 0x%08X\n", result);return std::string(buffer); }class MyException : public std::runtime_error { public:My…...
实操3:6位数码管
文章目录 文章介绍仿真图原来的仿真代码教学用开发板段选和位选对应引脚思考题实物图 文章介绍 对应“案例5_3: 6位数码管显示0或者1【静态显示】” 跳转链接 要求:实现开发板的6位数码管同时显示0或者1 仿真图 原来的仿真代码 #include<reg52.h> // 头文件…...
常识补充(NVIDIA NVLink技术:打破GPU通信瓶颈的革命性互联技术)
文章目录 **引言:为什么需要NVLink?**1. NVLink技术概述1.1 什么是NVLink?1.2 NVLink的发展历程 2. NVLink vs. PCIe:关键对比2.1 带宽对比2.2 延迟对比 3. NVLink的架构与工作方式3.1 点对点直连(P2P)3.2 …...
openwrt 使用quilt 打补丁(patch)
1,引入 本文简单解释如何在OpenWRT下通过quilt命令打补丁--patch,也可查看openwrt官网提供的文档 2,以下代码通过编译net-snmp介绍 ① 执行编译命令之后,进入build_dir的net-snmp-5.9.1目录下,改目录即为snmp最终编译的目录了 /…...
NVIDIA Halos:智能汽车革命中的全栈式安全系统
高级辅助驾驶行业正面临一个尴尬的"安全悖论"——传感器数量翻倍的同时,事故率曲线却迟迟不见明显下降。究其原因,当前行业普遍存在三大技术困局: 碎片化安全方案 传统方案就像"打补丁",激光雷达厂商只管点云…...
k8s术语之service
Kubernetes在设计之初就充分考虑了针对容器的服务发现与负载均衡机制,提供了Service资源,并通过kube-proxy配合cloud provider 来适应不同的用于场景。随着kubernetes用户的激增,用户场景的不断丰富,又产生了一些新的负载均衡机制…...
C/C++工程中的Plugin机制设计与Python实现
C/C工程中的Plugin机制设计与Python实现 1. Plugin机制设计概述 在C/C工程中实现Plugin机制通常需要以下几个关键组件: Plugin接口定义:定义统一的接口规范动态加载机制:运行时加载动态库注册机制:Plugin向主程序注册自己通信机…...
RNN 与 CNN:深度学习中的两大经典模型技术解析
在人工智能和深度学习领域,RNN(Recurrent Neural Network,循环神经网络) 和 CNN(Convolutional Neural Network,卷积神经网络) 是两种非常重要的神经网络结构。 它们分别擅长处理不同类型的数据,在自然语言处理、计算机视觉等多个领域中发挥着关键作用。 本文将从原理…...
多模态训练与微调
1.为什么多模态模型需要大规模预训练? 多模态模型需要大规模预训练的原因包括: (1)数据丰富性:大规模预训练可以暴露模型于丰富的数据,提升其泛化能力。 (2)特征提取:通过预训练,模型能够学习到有效的特…...
【HDLBits刷题】Verilog Language——1.Basics
目录 一、题目与题解 1.Simple wire(简单导线) 2.Four wires(4线) 3.Inverter(逆变器(非门)) 4.AND gate (与门) 5. NOR gate (或非门&am…...
基于深度学习的图像识别技术:从原理到应用
前言 在当今数字化时代,图像识别技术已经渗透到我们生活的方方面面,从智能手机的人脸解锁功能到自动驾驶汽车对交通标志的识别,再到医疗影像诊断中的病变检测,图像识别技术正以其强大的功能和广泛的应用前景,改变着我们…...
【coze】手册小助手(提示词、知识库、交互、发布)
【coze】手册小助手(提示词、知识库、交互、发布) 1、创建智能体2、添加提示词3、创建知识库4、测试智能体5、添加交互功能6、发布智能体 1、创建智能体 2、添加提示词 # 角色 你是帮助用户搜索手册资料的AI助手 ## 工作流程 ### 步骤一:查询知识库 1.每…...
【教学类-34-11】20250506异形拼图块(圆形、三角、正方,椭圆/半圆)的中2班幼儿偏好性测试(HTML)
背景介绍 最近在写一份工具运用报告,关于剪纸难度的。所以设计了蝴蝶描边系列和异形凹凸角拼图。 【教学类-102-20】蝴蝶三色图作品2——卡纸蝴蝶“满格变形图”(滴颜料按压对称花纹、原图切边后变形放大到A4横版最大化)-CSDN博客文章浏览阅读609次,点赞8次,收藏3次。【…...
Debian系统上PostgreSQL15版本安装调试插件及DBeaver相应配置
PostgreSQL所在Debian Linux服务器安装插件程序 在PostgreSQL数据库服务器Debian系统上执行以下命令,安装插件pldebugger: sudo apt install postgresql-15-pldebugger #上面这一条命令运行完好像pgsql服务自动重启了,看日志的样子是这样的,…...
GD32F470+CH395Q
tcp_client配置 第一步:资料下载 以太网协议栈芯片 CH395 - 南京沁恒微电子股份有限公司 第二步:准备工程 (1) 首先准备一个编译无报错、可以正常打印和延时的工程文件,官方例程采用STM32F1芯片,但本文…...
解决Hyper-V无法启动Debian 12虚拟机
问题 有时,我们会想要在Hyper-V中运行Debian12。我们想利用该系统的ISO镜像文件安装一个全新的虚拟机。 然而,当我们在Hyper-V中创建了一个2代虚拟机、添加了Debian 12的网络安装(Netinst)ISO作为最先启动的介质时,Hy…...
linux redis 设置密码以及redis拓展
redis拓展:http://pecl.php.net/package/redis 在服务器上,这里以linux服务器为例,为redis配置密码。 需要永久配置密码的话就去redis.conf的配置文件中找到requirepass这个参数,如下配置: 修改redis.conf配置文件 # requirepass …...
uniapp app 端获取陀螺仪数据的实现攻略
在 uniapp 开发中,uni.startGyroscope在 app 端并不被支持,这给需要获取陀螺仪数据的开发者带来了挑战。不过,借助 Native.js,我们能调用安卓原生代码实现这一需求。接下来,就为大家详细介绍实现步骤,并附上…...
第三节:Vben Admin 最新 v5.0 对接后端登录接口(下)
文章目录 前言一、处理请求头Authorization二、/auth/user/info 接口前端接口后端接口三、/auth/codes 接口1.前端2.后端四、测试接口前言 上一节内容,实现了登录的/auth/login 接口,但是登陆没有完成,还需要完成下面两个接口。才能完成登录。 一、处理请求头Authorizatio…...
标题:基于自适应阈值与K-means聚类的图像行列排序与拼接处理
摘要: 本文提出了一种基于自适应阈值和K-means聚类的图像行列排序与拼接方法。通过对灰度图像的自适应二值化处理,计算并分析图像的左右边距,从而确定图像的行数与列数。通过对图像进行特征提取,并使用K-means聚类进行排序&#…...
修改磁盘权限为管理员
1.右击需要修改的磁盘,点击属性 然后一路点击确定 已经修改好了...
P1782 旅行商的背包 Solution
Description 有一个体积为 C C C 的背包和若干种物品. 前 n n n 种物品,第 i i i 种体积为 v i v_i vi,价值 w i w_i wi,有 d i d_i di 件. 后 m m m 种物品,每种对应一个函数 f ( x ) a i x 2 b i x c i f(x)a…...
Acrel-EIoT 能源物联网云平台在能耗监测系统中的创新设计
摘要 随着能源管理的重要性日益凸显,能耗监测系统成为实现能源高效利用的关键手段。本文详细介绍了基于安科瑞Acrel-EIoT能源物联网云平台的能耗监测系统的设计架构与应用实践。该平台采用分层分布式结构,涵盖感知层、网络层、平台层和应用层࿰…...
乘法逆元【费马小定理+扩展欧几里得】
目录 模运算性质费马小定理乘法逆元扩展欧几里得算法随机栈 模运算性质 费马小定理 a,b互质:gcd(a,b)1 乘法逆元 a,b互质,满足a*x同余1(mod b),x是a模b的乘法逆元,记作a的-1次方。 扩展欧几里得算法 求axbygcd(a,b)的一组(x,y). 随机栈 题目来源&…...