当前位置: 首页 > news >正文

Day57-Nginx反向代理与负载均衡初步应用

Day57-Nginx反向代理与负载均衡初步应用

  • 1. Nginx代理介绍
  • 2. Nginx代理常见模式
    • 2.1 正向代理
    • 2.2 反向代理
    • 2.3 正向与反向代理区别
  • 3. Nginx代理支持协议
  • 4. Nginx反向代理场景实践
  • 5. lb01安装部署nginx

1. Nginx代理介绍

1)在没有代理的情况下,都是客户端直接请求服务端,服务端直接响应客户端。
在这里插入图片描述

2)租客租房,中介代理
在这里插入图片描述

3)在有代理模式的情况下,客户端往往无法直接向服务端发起请求,而是需要使用到中间代理服务,来实现客户端和服务通信。
在这里插入图片描述

4)为什么要使用代理功能?

  1. 提高访问效率。
  2. 承担单机无法处理的大并发流量请求。
  3. 满足7&24不宕机不丢数据需求。

2. Nginx代理常见模式

Nginx作为代理服务, 按照应用场景模式主要分为正向代理、反向代理两种模式

2.1 正向代理

*正向代理,早期的应用场景主要用于局域网内的电脑内部上网,主要解决的痛点是早期企业带宽有限,用户上网拥挤,速度慢,以及上网行为管理。目前带宽已不是问题,并且智能路由器等实现上网管理功能,因此正向代理应用已不那么流行了。
在这里插入图片描述

在这里插入图片描述

2.2 反向代理

反向代理的核心应用场景为用于公司后台网站集群架构中,客户端->代理<–>服务端,解决的主要痛点是单台机器无法承受大量并发用户的服务请求。需要有多台服务器同时处理请求。

在这里插入图片描述

在这里插入图片描述

2.3 正向与反向代理区别

1.服务的"对象"不同

正向代理代理的对象是局域网内的上网客户端,为其服务。

反向代理代理的对象是服务端,为上网的用户提供服务服务。

2.架设位置不同

正向代理架设在企业办公上网出口位置

反向代理架设在企业网站服务器的前端

3.代理作用不同

正向代理解决局域网上网提速、节约网站带宽、管控员工上网行为。

反向代理解决单台网站服务器撑不住流量并发问题,同时保障网站7X24不间断提供服务的需求。

3. Nginx代理支持协议

1.Nginx作为代理服务,可支持的代理协议非常的多,具体如下图
在这里插入图片描述

2.Nginx作为反向代理,常常会用到如下几种代理协议,如下图所示
在这里插入图片描述

Grpc:
链接: https://www.jianshu.com/p/9c947d98e192
链接: http://doc.oschina.net/grpc?t=58008

gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。
websocket
链接: https://www.zhihu.com/question/20215561
链接: https://baike.baidu.com/item/WebSocket/1953845?fr=aladdin

3.最后我将企业常用反向代理模式与Nginx反向代理模块对应关系总结如下表格

反向代理模式Nginx反向代理模块
http、websocket、httpsngx_http_proxy_module
fastcgingx_http_fastcgi_module
uwsgingx_http_uwsgi_module
grpcngx_http_v2_module

4. Nginx反向代理场景实践

1)Nginx反向代理配置语法示例

Syntax: proxy_pass URL;
Default: —
Context: location, if in location, limit_except
#示例
proxy_pass http://localhost:8000/uri/
proxy_pass http://10.0.0.7:8000/uri/
proxy_pass http://unix:/tmp/backend.socket:/uri/

2)Nginx反向代理配置实例
在这里插入图片描述

角色外网IP(NAT)内网IP(LAN)主机名
反向代理eth0:10.0.0.5eth1:172.16.1.5lb01
Web服务eth1:172.16.1.7web01

3)web01、web02服务器, 分别配置虚拟主机

#web01服务器配置测试虚拟主机
[root@web01 ~]# cat /etc/nginx/conf.d/01_test.etiantian.org.conf
#server{
#    listen 80;
#    server_name _default;
#    return 404;
#}server {listen 80;server_name test.etiantian.org;charset utf-8;location / {root /usr/share/nginx/html/test;index index.html index.htm;}
}[root@web01 conf.d]# mkdir /usr/share/nginx/html/test
[root@web01 conf.d]# echo "web01" >/usr/share/nginx/html/test/index.html
[root@web01 conf.d]# systemctl restart nginx
[root@web01 conf.d]# curl -H "Host:test.etiantian.org" 10.0.0.7
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
[root@web01 conf.d]# curl -H "Host:test.etiantian.org" 10.0.0.7
web01#web02服务器配置测试虚拟主机
[root@web02 ~]# cat /etc/nginx/conf.d/01_test.etiantian.org.conf
server{listen 80;server_name _default;return 404;
}server {listen 80;server_name test.etiantian.org;charset utf-8;location / {root /usr/share/nginx/html/test;index index.html index.htm;}
}[root@web02 conf.d]# mkdir /usr/share/nginx/html/test
[root@web02 conf.d]# echo "web02" >/usr/share/nginx/html/test/index.html
[root@web02 conf.d]# systemctl restart nginx
[root@web02 conf.d]# curl -H "Host:test.etiantian.org" 10.0.0.8
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
[root@web02 conf.d]# curl -H "Host:test.etiantian.org" 10.0.0.8
web02

在这里插入图片描述

4)proxy代理服务器, 配置监听eth0的80端口,使10.0.0.0网段的用户,能够通过代理服务器访问到后端的172.16.1.7的80端口站点内容

[root@lb01 conf.d]# cat /etc/nginx/conf.d/blog.etiantian.org.conf
server {listen 80;server_name test.etiantian.org;location / {proxy_pass http://172.16.1.7:80;proxy_set_header Host $http_host; #nginx代理携带请求头请求后端Web节点}
}
[root@lb01 conf.d]# systemctl enable nginx
[root@lb01 conf.d]# systemctl start nginx

在这里插入图片描述

更多见day57-oldboy最牛.txt
5)抓包分析Nginx代理处理整个请求的过程
扩展作业
6)添加发往后端服务器的请求头信息, 如图

Syntax: proxy_set_header field value;
Default: proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
Context: http, server, location
# 客户端请求Host的值是blog.etiantian.org, 那么代理服务会像后端请求时携带Host变量为blog.etiantian.org
proxy_set_header Host $http_host;
# 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip
proxy_set_header X-Real-IP $remote_addr;
# 客户端通过代理服务访问后端服务,后端服务会通过该变量会记录真实客户端地址
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;

7)代理的向后端请求时使用的HTTP协议版本。默认1.0版本。如果使用长连接,建议调整为1.1版本协议。

Syntax: proxy_http_version 1.0 | 1.1;
Default: proxy_http_version 1.0;
Context: http, server, location
This directive appeared in version 1.1.4.
# proxy_http_version 1.1;

8)代理到后端的TCP连接、响应、返回等超时时间, 如图

#nginx代理与后端服务器连接超时时间(代理连接超时)
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location#nginx代理等待后端服务器的响应时间
Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location#后端服务器数据回传给nginx代理超时时间
Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location

5. lb01安装部署nginx

  1. 使用官方仓库安装Nginx
#yum install nginx -y 可能优先使用epel里的源,怎么确保我们配置的官方优先。
[root@web01 ~]# rpm -qa yum-plugin-priorities
[root@web02 ~]# yum install yum-plugin-priorities -y
[root@web01 ~]# cat /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
priority=1  #增加优先参数,使得官方源优先epel源。#安装Nginx
[root@web01 ~]# yum install nginx -y
  1. 配置Nginx进程运行的用户
[root@web01 ~]# useradd -u1111 www -s /sbin/nologin -M
[root@web01 ~]# sed -i '/^user/c user www;' /etc/nginx/nginx.conf
[root@web01 ~]# grep "^user" /etc/nginx/nginx.conf
  1. 启动Nginx,并将Nginx加入开机自启
[root@web01 ~]# systemctl start nginx
[root@web01 ~]# systemctl enable nginx[root@web01 ~]# lsof -i :80 #查看端口对应的服务
[root@web01 ~]# nginx -v    #查看版本
nginx version: nginx/1.20.1 
[root@web01 ~]# curl 10.0.0.5 #welcome to Nginx 表示正常。

实验1:

[root@lb01 conf.d]# vim 01_test.etiantian.org.conf 
server {listen 80;server_name test.etiantian.org;location / {proxy_pass http://172.16.1.7:80;proxy_set_header Host $http_host;}
}[root@lb01 conf.d]# curl -H "Host:test.etiantian.org" 10.0.0.5
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>

实验2:

[root@lb01 conf.d]# vim 01_test.etiantian.org.conf 
server {listen 80;server_name test.etiantian.org;location / {proxy_pass http://172.16.1.7:80;proxy_set_header Host $http_host; #实现Nginx代理携带host字段请求节点。}
}# 成功
[root@lb01 conf.d]# curl -H "Host:test.etiantian.org" 10.0.0.5
web01
  1. 拆分不同的后端服务器提供访问。
    1.动静分离。
    2.不同的动态业务分离。

网站集群:一个项目下的

www.etiantian.org                   #
www.etiantian.org/dynamic/xx//xxxx  #动态服务器集群
www.etiantian.org/regi/xx//xxxx     #注册登录服务器集群
www.etiantian.org/regi/xx//xxxx     #手机服务器集群
......

二级页面:

tongzhuang.etiantian.org  
neiyi.etiantian.org
image.etiantian.org

静态服务:独立域名
image.ett.com

[root@web01 conf.d]# cat location01.etiantian.org.conf 
server {listen 80;server_name www.etiantian.org;#www.etiantian.orglocation / {proxy_pass http://172.16.1.7:80;proxy_set_header Host $http_host;}#www.etiantian.org/dynamic/xx//xxxx  #动态服务器集群location /dynamic/ {proxy_pass http://172.16.1.8:80; ##动态proxy_set_header Host $http_host;}#www.etiantian.org/regi/xx//xxxx     #注册登录服务器location ^~ /regi/ {proxy_pass http://172.16.1.9:80; #注册登录服务器集群proxy_set_header Host $http_host;}#www.etiantian.org/regi/xx//xxxx     #手机服务器集群#location ^~ $http_user_agent = 安卓英文 {proxy_pass http://172.16.1.9:80; ##手机服务器集群proxy_set_header Host $http_host;}##静态location ~* \.(gif|jpg|jpeg)$ {proxy_pass http://172.16.1.10:80;proxy_set_header Host $http_host;}
}
  1. 负载均衡 backend服务器池
    1)基本负载均衡实验
[root@lb01 conf.d]# cat 01_test.etiantian.org.conf 
upstream backend {#server backend1.example.com       weight=5;#server backend2.example.com:8080;#server unix:/tmp/backend3;server 172.16.1.7        weight=2; #默认80端口server 172.16.1.8        weight=1; #默认80端口#server 8080.etiantian.org:8080     backup; #热备#server backup2.example.com:8080   backup; #热备
}server {listen 80;server_name test.etiantian.org;location / {proxy_pass http://backend;#proxy_pass http://a.etiantian.org:80;proxy_set_header Host $http_host;}
}

配置web01:

[root@web01 conf.d]# cat 01_test.etiantian.org.conf 
server{listen 80;server_name _default;return 404;
}server {listen       80;server_name  test.etiantian.org;charset        utf-8;location / {root   /usr/share/nginx/html/test;index  index.html index.htm;}
}
server {listen       8080;server_name  test.etiantian.org;charset        utf-8;location / {root   /usr/share/nginx/html/test8080;index  index.html index.htm;}
}

配置web02:

[root@web02 conf.d]# cat 01_test.etiantian.org.conf 
server{listen 80;server_name _default;return 404;
}server {listen       80;server_name  test.etiantian.org;charset        utf-8;location / {root   /usr/share/nginx/html/test;index  index.html index.htm;}
}systemctl restart nginx# 实现效果:
[root@web02 conf.d]# curl -H "host:test.etiantian.org" 10.0.0.8
web02
[root@web02 conf.d]# curl -H "host:test.etiantian.org" 10.0.0.7
web01

结果:

[root@lb01 conf.d]# for n in {1..100}; do curl test.etiantian.org;sleep 1;done
web01
web02
web01
web01
web02
web01
web01
web02

2)测试backup功能

[root@lb01 conf.d]# cat 01_test.etiantian.org.conf 
upstream backend {#server backend1.example.com       weight=5;#server backend2.example.com:8080;#server unix:/tmp/backend3;server 172.16.1.7        weight=2; #默认80端口server 172.16.1.8        weight=1; #默认80端口#server 8080.etiantian.org:8080     backup; #热备#server backup2.example.com:8080   backup; #热备
}
server {listen 80;server_name test.etiantian.org;location / {proxy_pass http://backend;#proxy_pass http://a.etiantian.org:80;proxy_set_header Host $http_host;}
}

#host解析

[root@lb01 conf.d]# grep 80 /etc/hosts
172.16.1.7 web01 8080.etiantian.org关掉web02 nginx:pkill nginx,然后回到lb01访问
[root@lb01 conf.d]# for n in {1..100}; do curl test.etiantian.org;sleep 1;done
web02
web02
web02
web01-8080
web01-8080
web01-8080
web02
web02

相关文章:

Day57-Nginx反向代理与负载均衡初步应用

Day57-Nginx反向代理与负载均衡初步应用 1. Nginx代理介绍2. Nginx代理常见模式2.1 正向代理2.2 反向代理2.3 正向与反向代理区别 3. Nginx代理支持协议4. Nginx反向代理场景实践5. lb01安装部署nginx 1. Nginx代理介绍 1&#xff09;在没有代理的情况下&#xff0c;都是客户端…...

【PHP】通过PHP开启/暂停Apache、MySQL或其他服务

目录 一、前言 二、代码 一、前言 有些时候我们需要开启或暂停一些服务&#xff0c;比如说开启Apach或暂停MySQL服务等&#xff0c;最近工作中也开发了这方面的功能&#xff0c;记录下来怎样使用PHP语言来开启或暂停Apache、MySQL服务的运行状态。 这种方法也适用其他服务。…...

JAVA中spring介绍

Spring框架是一个开源的Java平台&#xff0c;它最初由Rod Johnson于2003年创建&#xff0c;目的是简化企业级应用的开发。Spring框架的核心特性包括控制反转&#xff08;IoC&#xff09;、面向切面编程&#xff08;AOP&#xff09;、事务管理、数据访问等。它通过提供一套综合的…...

latex下载与安装

用jupyter导出pdf时&#xff0c;需要用到Tex 1.Tex下载安装 官网 直接git下载 git clone https://github.com/latex3/latex2e.git 或者 清华大学开源软件镜像 双击.bat文件 大概需要1-2小时&#xff0c;如果安装失败&#xff0c;重新进行安装 查看是否安装成功&#xff…...

JavaParser 手动安装和配置

目录 前言 一、安装 Maven 工具 1.1 Maven 软件的下载 1.2 Maven 软件的安装 1.3 Maven 环境变量配置 1.4 通过命令检查 Maven 版本 二、配置 Maven 仓库 2.1 修改仓库目录 2.2 添加国内镜像 三、从 Github 下载 JavaParser 3.1 下载并解压 JavaParser 3.2 从路径打…...

再次度过我的创作纪念日

机缘 写博客的机缘巧合已经在上一篇博客中写到了&#xff0c;至于收获和成就也不一一赘述了。想和大家聊的呢就这最近这一年左右的经历吧 日常 自从2022年开始&#xff0c;入职了一家大型的项目外派公司&#xff0c;名字就不说了。开始了我的保险公司系统的开发工作。工作地点…...

云电脑火爆出圈,如何选择和使用?--腾讯云、ToDesk云电脑、青椒云使用评测和攻略

前言&#xff1a; Hello大家好&#xff0c;我是Dream。在当下&#xff0c;科技的飞速发展已经深入影响着我们的日常生活&#xff0c;特别是随着物联网的兴起和5G网络的普及&#xff0c;云计算作为一个重要的技术概念也逐渐走进了我们的视野。云计算早已不再是一个陌生的名词&am…...

webpack原理之-打包流程热更新HMR

webpack打包流程&#xff1f; 1. 初始化: 启动构建&#xff0c;读取与合并配置参数&#xff0c;加载Plugin&#xff0c;实例化Compiler&#xff1b; 2. 编译: 从 entry出发&#xff0c;针对每个 Module 串行调用对应的 loader 去翻译文件的内容&#xff0c;再找到该 Module 依赖…...

SELinux详解

文章目录 SELinux详解什么是SELinux当初设计的目标&#xff1a;避免资源的误用传统的文件权限与账号主要的关系&#xff1a;自主访问控制(DAC)以策略规则制定特定进程读取特定文件&#xff1a;强制访问控制(MAC) SELinux的运行模式安全上下文进程与文件SELinux类型字段的相关性…...

Go语言实现SSE中转demo

Go语言实现SSE中转demo 文章概要&#xff1a;本文主要通过一个demo来介绍如何使用Go语言实现SSE中转。 本文内容来自&#xff1a;谷流仓AI - ai.guliucang.com 前提 已安装Go语言环境&#xff08;参考这篇文章:Macbook安装Go以及镜像设置&#xff09; 创建项目 创建项目目录…...

国内IP修改软件下载指南

在互联网时代&#xff0c;IP地址扮演了一个非常重要的角色。国内IP修改成为一些用户迫切需求的问题&#xff0c;因为它可以帮助用户解决一些特定的网络访问问题。那么&#xff0c;要修改国内IP地址&#xff0c;我们该使用哪些软件呢&#xff1f;虎观代理小二将为大家列举几款可…...

模数转换器 SIG1230A 国产平替 ADS1230,替代 ADS1230

信格勒微电子的芯片产品已通过行业头部大厂导入验证&#xff0c;深受百万终端客户好评。 而且因为 fully compatible. 板子拿来&#xff0c;换个芯片&#xff0c; 性能更好 。MCU不用改 c code。 SIG1230A 10/80SPS 20-bit ADC with PGA Compatible Parts ADS1230 fully…...

获取淘宝商品评论的爬虫技术分享(已封装API,可测试)

item_review-获得淘宝商品评论 公共参数 请求地址: taobao/item_review 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,it…...

由vue2版本升级vue3版本遇到的问题

一、vuedraggable 由vue2版本升级vue3版本后&#xff0c;可能会遇到以下几种bug&#xff1a; 1、vue3vuedraggable报错TypeError: Cannot read properties of undefined (reading ‘updated’)&#xff1a;这个一般是因为插件使用语法有问题&#xff0c;vue3版本的插件使用时&…...

数据挖掘终篇!一文学习模型融合!从加权融合到stacking, boosting

模型融合&#xff1a;通过融合多个不同的模型&#xff0c;可能提升机器学习的性能。这一方法在各种机器学习比赛中广泛应用&#xff0c; 也是在比赛的攻坚时刻冲刺Top的关键。而融合模型往往又可以从模型结果&#xff0c;模型自身&#xff0c;样本集等不同的角度进行融合。 数据…...

24考研数学炸了,给25考研人的启示

复习原则和要素 在选择老师、思路的时候&#xff0c;一定要看清楚&#xff0c;认不认可这个老师的复习思路。 有的老师认为大家基础不错&#xff0c;讲的内容可能不会特别细致。有的老师注重基础&#xff0c;讲的很细致&#xff0c;防止0基础的学生吃力。所以&#xff0c;思路…...

嵌入式学习第三十天!(单向链表练习)

1. 单向链表的逆序&#xff1a; int Is_Empty_Link(LINK_LIST *plist) {return plist->phead NULL; }void Reverse_Link(LINK_LIST *plist) {LINK_NODE *ptmp plist->phead;LINK_NODE *pinsert NULL;plist->phead NULL;if(Is_Empty_Link(plist)){return;}else{wh…...

Linux:rpm部署Jenkins(1)

1.获取Jenkins安装包 我这里使用的是centos7系统&#xff0c;ip为&#xff1a;192.168.6.6 2G运存 连接外网 Jenkins需要java环境&#xff0c;java的jdk包你可以去网上下载离线包&#xff0c;或者直接去yum安装&#xff0c;我这里使用的是yum安装 再去获取Jenkins的rpm包…...

新能源汽车充电桩站点烟火AI识别检测算法应用方案

新能源汽车作为现代科技与环保理念的完美结合&#xff0c;其普及和应用本应带给人们更加便捷和绿色的出行体验。然而&#xff0c;近年来新能源汽车充电火灾事故的频发&#xff0c;无疑给这一领域投下了巨大的阴影。这不禁让人深思&#xff0c;为何这一先进的交通工具在充电过程…...

Macbook安装Go以及镜像设置

Macbook安装Go 文章概要&#xff1a;本文主要介绍了在MacOS上安装Go的步骤 本文内容来自&#xff1a;谷流仓AI - ai.guliucang.com 有两种方式安装go&#xff1a; 通过homebrew安装通过Go官网直接下载安装文件安装 1. 通过homebrew安装 brew update && brew install…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...