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

浏览器会提示证书不安全(因自签名),选择“高级’”--继续前往或信任此证书(测试环境可忽略警告)。

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

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

相关文章

windows 环境下 python环境安装与配置

运行环境安装 第一步安装包下载 python开发工具安装包下载官网&#xff1a; https://www.python.org/ 根据自己的实际需求选择。 这里记录了各个版本的区别和差异。根据区别和差异选择适合自己的版本。 Windows Installer和Windows embeddable package是两种不同的软件包类…

TB6600HG是一款PWM(脉宽调制)斩波型单芯片双极性正弦波微步进电机驱动集成电路。

该驱动器支持电机的正向和反向旋转控制&#xff0c;并具有多种激励模式&#xff0c;包括2相、1-2相、W1-2相、2W1-2相和4W1-2相。 使用这款驱动器&#xff0c;只需时钟信号即可驱动2相双极性步进电机&#xff0c;且振动小、效率高。 主要特点&#xff1a; 单芯片双极性正弦波…

【JS逆向基础】爬虫核心模块:request模块与包的概念

前言&#xff1a;这篇文章主要介绍JS逆向爬虫中最常用的request模块&#xff0c;然后引出一系列的模块的概念&#xff0c;当然Python中其他比较常用的还有很多模块&#xff0c;正是这些模块也可以称之为库的东西构成了Python强大的生态&#xff0c;使其几乎可以实现任何功能。下…

极狐Gitlab 里程碑功能介绍

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 里程碑 (BASIC ALL) 极狐GitLab 中的里程碑是一种跟踪议题和合并请求的方法&#xff0c;这些请求是为了在特定时间段内实现更…

【日撸 Java 三百行】Day 10(综合任务 1)

目录 Day 10&#xff1a;综合任务 1 一、题目分析 1. 数据结构 2. 相关函数基本知识 二、模块介绍 1. 初始化与成绩矩阵的构建 2. 创建总成绩数组 3. 寻找成绩极值 三、代码与测试 小结 拓展&#xff1a;关于求极值的相关算法 Day 10&#xff1a;综合任务 1 Task&…

c++:库(Library)

目录 什么是库&#xff1f; C中库的两种形态&#xff1a;静态库 和 动态库 静态链接 vs 动态链接&#xff08;链接 ≠ 库&#xff09; &#x1f512; 静态链接&#xff08;Static Linking&#xff09; &#x1f517; 动态链接&#xff08;Dynamic Linking&#xff09; C标…

Java线程池深度解析:从使用到原理全面掌握

在高并发场景下&#xff0c;线程管理是提升系统性能的关键。本文将深入探讨Java线程池的核心机制&#xff0c;带你从基础使用到底层实现全面掌握这一重要技术。 一、线程池存在的意义 1.1 线程的隐形成本 尽管线程相比进程更轻量&#xff0c;但当QPS达到万级时&#xff1a; 频…

PostgreSQL 的 pg_advisory_lock_shared 函数

PostgreSQL 的 pg_advisory_lock_shared 函数详解 pg_advisory_lock_shared 是 PostgreSQL 提供的共享咨询锁函数&#xff0c;允许多个会话同时获取相同键值的共享锁&#xff0c;但排斥排他锁。 共享咨询锁 vs 排他咨询锁 锁类型共享锁 (pg_advisory_lock_shared)排他锁 (pg…

Halcon之计算抓取螺母的位姿

文章目录 1&#xff0c;项目说明。2&#xff0c;注意事项3&#xff0c;关联的主要算子3.1&#xff0c; gen_parallels_xld 3.2 &#xff0c;convert_pose_type 4&#xff0c;程序流程。5&#xff0c;代码6&#xff0c;Demo链接。 1&#xff0c;项目说明。 Robot标定使用的模式…

互联网大厂Java求职面试:AI集成场景下的技术挑战与架构设计

标题&#xff1a;互联网大厂Java求职面试&#xff1a;AI集成场景下的技术挑战与架构设计 第一幕&#xff1a;向量数据库选型与性能调优 技术总监&#xff08;严肃脸&#xff09;&#xff1a; 郑薪苦&#xff0c;我们最近在做一个基于大语言模型的企业级AI应用&#xff0c;需要…

ABB电机控制和保护单元与Profibus DP主站转Modbus TCP网关快速通讯案例

ABB电机控制和保护单元与Profibus DP主站转Modbus TCP网关快速通讯案例 在现代工业自动化系统中&#xff0c;设备之间的互联互通至关重要。Profibus DP和Modbus TCP是两种常见的通信协议&#xff0c;分别应用于不同的场景。为了实现这两种协议的相互转换&#xff0c;Profibus …

智慧农业、智慧养殖平台—监控摄像头管理监控设计—仙盟创梦IDE

智慧养殖 监控摄像头是核心管理工具&#xff0c;主要通过以下方式提升养殖效率与管理水平&#xff1a; 环境实时监测&#xff1a;对养殖区域进行全天候可视化监控&#xff0c;及时捕捉温度、湿度、通风等环境要素变化&#xff0c;确保动物生存环境稳定 。例如在规模化猪场&…

YOLO 从入门到精通学习指南

一、引言 在计算机视觉领域,目标检测是一项至关重要的任务,其应用场景广泛,涵盖安防监控、自动驾驶、智能交通等众多领域。YOLO(You Only Look Once)作为目标检测领域的经典算法系列,以其高效、快速的特点受到了广泛的关注和应用。本学习指南将带领你从 YOLO 的基础概念…

Java 24新特性深度解析:从优化技巧到高手进阶指南

一、Java 24核心新特性详解 Java 24作为长期支持版本(LTS)&#xff0c;带来了许多令人振奋的新特性&#xff0c;下面我们将深入探讨其中最值得关注的改进。 1. 字符串模板&#xff08;String Templates&#xff09;正式发布 字符串模板结束了Java字符串拼接的混乱时代&#…

《类和对象(中)》

引言&#xff1a; 上次我们主要学习了类的相关知识&#xff0c;今天我们就来学习类和对象(中)&#xff0c;今天也会用到之前学习过的东西&#xff0c;可以说是前面知识的结合&#xff0c;较前面会难一点&#xff08;打个预防针&#xff09;。 一&#xff1a;类的默认成员函数…

为什么 AI 理解不了逻辑问题?

人类擅长“如果 A 则 B”,AI 擅长“这个像那个”。逻辑推理?对它来说是一场灾难性的认知挑战。 前言 在实际使用 AI(尤其是大型语言模型,比如 GPT、Claude、Gemini 等)时,我们常发现一个诡异的现象:它们文采斐然,甚至能讲出笑话,但一旦问点小学奥数或逻辑问题,就集体…

C# 使用SunnyUI控件 (VS 2019)

前言&#xff1a;建议下载源码&#xff0c;源码中包含了各种控件的用法案例。 下载 帮助文档: 文档预览 - Gitee.comGitee: SunnyUI: SunnyUI.NET 是基于.NET Framework 4.0、.NET8、.NET9 框架的 C# WinForm UI、开源控件库、工具类库、扩展类库、多页面开发框架。GitHub: h…

Spring Cloud: Nacos

Nacos Nacos是阿里巴巴开源的一个服务发现&#xff0c;配置管理和服务管理平台。只要用于分布式系统中的微服务注册&#xff0c;发现和配置管理&#xff0c;nacos是一个注册中心的组件 官方仓库&#xff1a;https://nacos.io/ Nacos的下载 Releases alibaba/nacos 在官网中…

Linux下的c/c++开发之操作mysql数据库

libmysqlclient-dev介绍&#xff08;Linux 下的 Mysql C/C 开发包&#xff09; libmysqlclient-dev 是一个开发包&#xff0c;在Linux环境下为使用 MySQL C API 进行开发的c/c程序员提供头文件&#xff08;如 mysql.h&#xff09;和静态库/动态库的链接信息&#xff08;如 lib…

Java EE(Spring+Spring MVC+MyBatis)从入门到精通企业级应用开发教程——1初识MyBatis框架

1、MyBatis工作原理 MyBatis操作数据库流程分为8个步骤&#xff0c;具体介绍如下&#xff1a; &#xff08;1&#xff09;MyBatis读取核心配置文件mybatis-config.xml mybatis-config.xml核心配置文件主要配置了MyBatis的运行环境等信息。 &#xff08;2&#xff09;加载映射…