Nginx详解 第五部分:Ngnix反向代理(负载均衡 动静分离 缓存 透传 )

news2024/11/26 12:21:01

Part 5

  • 一、正向代理与反向代理
    • 1.1 正向代理简介
    • 1.2 反向代理简介
  • 二、配置反向代理
    • 2.1 反向代理配置参数
      • 2.1.1 proxy_pass
      • 2.1.2 其余参数
    • 2.2 配置实例:反向代理单台web服务器
    • 2.3 代理转发
  • 三、反向代理实现动静分离
  • 四、缓存功能
  • 五、反向代理客户端的IP透传
    • 5.1 原理概述
    • 5.2 一级代理
    • 5.3 多级代理
  • 六、反向代理负载均衡
    • 6.1 工作原理
    • 6.2 部分配置参数
    • 6.3 调度算法
    • 6.4 配置实例
      • 6.4.1 使用轮询算法
      • 6.3.2 使用加权轮询
      • 6.3.3 备份-----使用backup参数

一、正向代理与反向代理

1.1 正向代理简介

在这里插入图片描述

什么是正向代理?

正向代理代理的是客户端

客户端设备要访问局域网以外的 Internet 时,需在客户端浏览器中配置代理服务器,然后通过代理服 务器来进行访问,将访问到的局域网以外的 Internet 网站内容返回给客户端,而不是通过局域网中的客 户端设备直接访问。

正向代理的用途

访问原来无法访问的资源

可做缓存,加速访问资源;

对客户端访问授权,上网进行认证;

代理可以记录用户访问记录等,且对外隐藏用户信息

简单配置

server {
    listen 80;
    server_name ....;#客户端访问的域名或IP地址

    location / {
      proxy_pass http://目标服务器地址;
    }
  }

1.2 反向代理简介

在这里插入图片描述

官方文档https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass 

什么是反向代理?

反向代理代理的是服务端

在使用反向代理时,客户端向一个服务器发送请求,而实际上该请求会被转发到后端的多个真实服务器(也称为上游服务器),然后由反向代理服务器来处理请求并将结果返回给客户端。

客户端不直接与后端服务器进行通信,而是与反向代理服务器进行通信,隐藏了后端服务器的 IP 地址

反向代理能实现的功能

反向代理的主要作用是提供负载均衡和高可用性

负载均衡:Nginx可以将传入的请求分发给多个后端服务器,以平衡服务器的负载,提高系统性能和可靠性。

缓存功能:Nginx可以缓存静态文件或动态页面,减轻服务器的负载,提高响应速度。

动静分离:将动态生成的内容(如 PHP、Python、Node.js 等)和静态资源(如 HTML、CSS、JavaScript、图片、视频等)分别存放在不同的服务器或路径上。

多站点代理:Nginx可以代理多个域名或虚拟主机,将不同的请求转发到不同的后端服务器上,实现多个站点的共享端口。

反向代理的可用模块

ngx_http_proxy_module     
#将客户端的请求以http协议转发至指定服务器进行处理
ngx_http_upstream_module 
#用于定义为proxy_pass,fastcgi_pass,uwsgi_pass等指令引用的后端服务器分组
ngx_stream_proxy_module  
#将客户端的请求以tcp协议转发至指定服务器处理
ngx_http_fastcgi_module  
#将客户端对php的请求以fastcgi协议转发至指定服务器助理
ngx_http_uwsgi_module    
#将客户端对Python的请求以uwsgi协议转发至指定服务器处理

二、配置反向代理

2.1 反向代理配置参数

2.1.1 proxy_pass

proxy_pass 地址:端口的方式 ;  
#用来设置将客户端请求转发给的后端服务器的主机,可以是主机名(将转发至后端服务做为主机头首部)、IP
#也可以代理到预先设置的主机群组,需要模块ngx_http_upstream_module支持
#如果location定义其uri时使用了正则表达式模式(包括~,~*,但不包括^~),则proxy_pass之后必须不能使用uri; 即不能有/ ,用户请求时传递的uri将直接附加至后端服务器之后
proxy_pass http://10.0.0.18:8080; 和 
proxy_pass http://10.0.0.18:8080/;主要有以下区别:

1. 尾部斜杠的处理:在 `proxy_pass` 指令中,尾部斜杠的有无会影响代理的行为。当 `proxy_pass` 后跟一个斜杠 `/` 时,表示将请求的 URI 附加到代理服务器的地址后面。而当 `proxy_pass` 后没有斜杠时,请求的 URI 将被完全忽略,并将直接转发到指定的代理服务器。

   - `proxy_pass http://10.0.0.18:8080;`:请求将直接转发到 `http://10.0.0.18:8080`,不附加任何 URI。
   - `proxy_pass http://10.0.0.18:8080/;`:请求将被附加上原始 URI,并转发到 `http://10.0.0.18:8080`2. 请求路径的保留:当使用 `proxy_pass` 指令时,代理服务器会保留原始请求的路径信息。这意味着,无论使用哪种形式,原始请求的路径将被传递到目标服务器。只是在转发时是否附加原始路径的处理不同。
 

2.1.2 其余参数

proxy_hide_header field;
#用于nginx作为反向代理的时候,在返回给客户端http响应时,隐藏后端服务器相应头部的信息,可以设置

proxy_pass_header field;
#默认nginx在响应报文中不传递后端服务器的首部字段Date, Server, X-Pad, X-Accel等参数,如果
要传递的话则要使用 proxy_pass_header field声明将后端服务器返回的值传递给客户端
#field 首部字段大小不敏感
#示例:透传后端服务器的Server和Date首部给客户端,同时不再响应报中显示前端服务器的Server字段`
proxy_pass_header Server;
proxy_pass_header Date;


proxy_pass_request_body on | off; 
#是否向后端服务器发送HTTP实体部分,可以设置在http,server或location块,默认即为开启


proxy_pass_request_headers on | off; 
#是否将客户端的请求头部转发给后端服务器,可以设置在http,server或location块,默认即为开启

2.2 配置实例:反向代理单台web服务器

在这里插入图片描述

配置部分

7-1   代理服务器 

vim /apps/nginx/conf.d/computer.conf
#添加
location  / {
    proxy_pass http://192.168.2.102;
}

在这里插入图片描述

7-2   真实服务器 

yum  install   httpd  -y #安装服务

cd  /var/www/html
echo   "Hello World"  > index.html #主页内容

systemctl	start httpd #开启服务

在这里插入图片描述

7-3   客户机

vim  /etc/hosts
192.168.2.100  www.byyb.com

在这里插入图片描述

测试部分

7-3(客户端)访问 7-2(代理服务器)

curl 192.168.2.100

在这里插入图片描述

2.3 代理转发

要求:将用户对域 www.byyb.com的请求转发给后端服务器处理

在这里插入图片描述

7-1 代理服务器

vim /apps/nginx/conf.d/comupter.conf
#添加
location ~* / {
   proxy_pass http://192.168.2.102;
   }
#用正则表达式 后面不能用 / ,

在这里插入图片描述

三、反向代理实现动静分离

在这里插入图片描述

因为nginx无法处理动态资源,所以要动静分离。

指定location 实现反向代理 动静分离。

配置部分

7-1 代理服务器

编辑子配置文件
vim /apps/nginx/conf.d/computer.conf

在这里插入图片描述

7-2 动态资源服务器

#关闭防火墙和selinux
systemctl stop firewalld
setenforce 0

#安装服务
yum install -y epel-release #依赖
yum install nginx -y 
systemctl start nginx 

#创建动态资源目录
cd /usr/share/nginx/html
mkdir api
echo api > ./api/index.html

在这里插入图片描述

7-4 静态资源服务器

#关闭防火墙和selinux
systemctl stop firewalld ; setenforce 0

#安装服务
yum install -y epel-release #依赖
yum install nginx -y 
systemctl start nginx 

#创建静态资源目录
cd /usr/share/nginx/html
mkdir static
echo static > ./static/index.html

在这里插入图片描述

测试部分

7-3客户端

#关闭防火墙和selinux
systemctl stop firewalld ; setenforce 0

#动态资源
curl 192.168.2.100/api -L

#静态资源
curl 192.168.2.100/static -L

在这里插入图片描述

四、缓存功能

反向代理可以缓存静态资源,如图片、CSS和JavaScript文件等。

当客户端再次请求相同资源时,反向代理可以直接返回缓存中的响应,减少对后端服务器的请求压力,并加快响应速度。

proxy_cache zone_name | off; 默认off
#指明调用的缓存,或关闭缓存机制;Context:http, server, location
#zone_name 表示缓存的名称.需要由proxy_cache_path事先定义

proxy_cache_key string;
#缓存中用于“键”的内容,默认值:proxy_cache_key $scheme$proxy_host$request_uri;



proxy_cache_valid [code ...] time;
#定义对特定响应码的响应内容的缓存时长,定义在http{...}中
 示例:
 proxy_cache_valid 200 302 10m;
 proxy_cache_valid 404 1m;
 
 
 
proxy_cache_path;
#定义可用于proxy功能的缓存;Context:http 
proxy_cache_path path [levels=levels] [use_temp_path=on|off] 
keys_zone=zone_name:size [inactive=time] [max_size=size] [manager_files=number] 
[manager_sleep=time] [manager_threshold=time] [loader_files=number] 
[loader_sleep=time] [loader_threshold=time] [purger=on|off] 
[purger_files=number] [purger_sleep=time] [purger_threshold=time];


#示例:在http配置定义缓存信息
   proxy_cache_path /var/cache/nginx/proxy_cache #定义缓存保存路径,proxy_cache会自动创建
   levels=1:2:2 #定义缓存目录结构层次,1:2:2可以生成2^4x2^8x2^8=2^20=1048576个目录
   keys_zone=proxycache:20m #指内存中缓存的大小,主要用于存放key和metadata(如:使用次数),一般1M可存放8000个左右的key
   inactive=120s  #缓存有效时间  
   max_size=10g; #最大磁盘占用空间,磁盘存入文件内容的缓存空间最大值
   
   
#调用缓存功能,需要定义在相应的配置段,如server{...};或者location等
proxy_cache proxycache;
proxy_cache_key $request_uri; #对指定的数据进行MD5的运算做为缓存的key
proxy_cache_valid 200 302 301 10m; #指定的状态码返回的数据缓存多长时间
proxy_cache_valid any 1m;   #除指定的状态码返回的数据以外的缓存多长时间,必须设置,否则不会缓存


proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | 
http_502 | http_503 | http_504 | http_403 | http_404 | off ; #默认是off
#在被代理的后端服务器出现哪种情况下,可直接使用过期的缓存响应客户端
#示例
proxy_cache_use_stale error http_502 http_503;


proxy_cache_methods GET | HEAD | POST ...;
#对哪些客户端请求方法对应的响应进行缓存,GET和HEAD方法总是被缓存
proxy_cache_path /data/nginx/proyxcache   levels=1:1:1 keys_zone=proxycache:20m inactive=120s max_size=1g;

#上面那段写在 http语句

:1:1  16个二进制


server {
   listen 80;
   proxy_cache proxycache;
   proxy_cache_key $request_uri;
   #proxy_cache_key $host$uri$is_args$args;
   proxy_cache_valid 200 302 301 10m;
   proxy_cache_valid any 5m;
   server_name www.kgc.com;
   root /data/nginx/pc;
  location / {
  root /data/nginx/pc;
  }
  location /api {
  proxy_pass http://192.168.91.101:9527;
  }
  location ~* \.(jpg|png|gif|html)$ {
  proxy_pass http://192.168.91.102;
  }

}

五、反向代理客户端的IP透传

5.1 原理概述

反向代理客户端IP透传是指在使用反向代理服务器时,将客户端的真实IP地址传递给后端服务器

这可以通过一些特定的 HTTP 头字段来实现,比如 X-Forwarded-For (XFF) 头字段。

当请求经过反向代理服务器时,代理服务器会将客户端的真实IP地址添加到 XFF 头字段中,然后转发给后端服务器

5.2 一级代理

在这里插入图片描述

配置部分

7-1 代理服务器

#编辑子配置文件
vim /apps/nginx/conf.d/computer.conf
#修改location部分
 location / {
   index index.html index.php;
   root /data/nginx/html/pc;
   proxy_pass http://192.168.2.102;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }
}
#####
`$proxy_add_x_forwarded_for` 是一个 nginx 变量,用于获取客户端的真实 IP 地址并将其添加到请求中的 `X-Forwarded-For` 头字段中,后端服务器可以通过检查该头字段来获取请求的真实客户端 IP 地址。

`X-Forwarded-For` 头字段是一个常用的 HTTP 请求头,用于指示请求的真实客户端 IP 地址。

在这里插入图片描述

7-2 后端服务器

#关闭防火墙和selinux
systemctl stop firewalld
setenforce 0

#安装服务
yum install -y epel-release #依赖
yum install nginx -y 
systemctl start nginx 

测试部分

7-3客户端,访问代理服务器
curl 192.168.2.100
7-2 后端服务器,查看日志
cat /var/log/nginx/access.log | tail -n -2

在这里插入图片描述

5.3 多级代理

7-3 客户端     192.168.2.103

7-2 真实服务器   192.168.2.102

7-1 第1个代理服务器   192.168.2.100

7-4 第2个代理服务器   192.168.2.74 

在这里插入图片描述

配置部分

7-1 一级代理服务器

#编辑子配置文件
vim /apps/nginx/conf.d/computer.conf
#反向代理指向7-4的IP

在这里插入图片描述

nginx -t  #语法检查
nginx -s reload #重载
7-4 二级代理服务器

#yum安装nginx
#编辑主配置文件
vi /etc/nginx/nginx.conf

server {
location / {
proxy_pass http://192.168.2.102;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

在这里插入图片描述

nginx -t  #语法检查
nginx -s reload #重载
7-2 后端服务器

#关闭防火墙和selinux
systemctl stop firewalld
setenforce 0

#安装服务
yum install -y epel-release #依赖
yum install nginx -y 
systemctl start nginx 

测试部分

7-3客户端,访问代理服务器
curl 192.168.2.100
7-2 后端服务器,查看日志
cat /var/log/nginx/access.log | tail -n -1

在这里插入图片描述

六、反向代理负载均衡

Nginx 可以基于ngx_http_upstream_module模块提供服务器分组转发、权重分配、状态监测、调度算法等高级功能。

官方文档
https://nginx.org/en/docs/http/ngx_http_up

6.1 工作原理

Nginx负载均衡通过将传入的请求分发到多个后端服务器来实现负载均衡。

它可以根据不同的调度算法(如轮询、IP哈希、最小连接数等)将请求分发到后端服务器。

6.2 部分配置参数

server address [parameters];
#配置一个后端web服务器,配置在upstream内,至少要有一个server服务器配置。
#server支持的parameters如下:

weight=number #设置权重,默认为1,实现类似于LVS中的WRR,WLC等

max_conns=number  #给当前后端server设置最大活动链接数,默认为0表示没有限制
max_fails=number  #后端服务器的下线条件,当客户端访问时,对本次调度选中的后端服务器连续进行检测多少次,如果都失败就标记为不可用,默认为1次,当客户端访问时,才会利用TCP触发对探测后端服务器健康性检查,而非周期性的探测

fail_timeout=time #后端服务器的上线条件,对已经检测到处于不可用的后端服务器,每隔此时间间隔再次进行检测是否恢复可用,如果发现可用,则将后端服务器参与调度,默认为10秒



sorry server   自己不能转自己

down    #标记为down状态

resolve #当server定义的是主机名的时候,当A记录发生变化会自动应用新IP而不用重启Nginx
backup  #设置为备份服务器,当所有后端服务器不可用时,才会启用此备用服务器 

upstream backend {
    server backend1.example.com;
    server backend2.example.com backup;
    server backend3.example.com;
}

6.3 调度算法

1)轮询(Round Robin):这是默认的调度算法,Nginx依次分配每个请求给后端服务器,实现简单且公平的请求分发。

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }
    
    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}

2)加权轮询(Weighted Round Robin):通过为每个后端服务器指定一个权重,根据权重比例来分配请求。具有更高权重的服务器将获得更多的请求

http {
    upstream backend {
        server backend1.example.com weight=3;
        server backend2.example.com weight=1;
    }
    
    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }

}

3)IP Hash:根据客户端的IP地址进行散列,将同一IP的请求分配给同一台后端服务器,实现会话保持。

http {
    upstream backend {
        ip_hash;
        server backend1.example.com;
        server backend2.example.com;
    }
    
    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}

4)URL哈希(URL Hash):基于请求的URL进行散列计算,将相同URL的请求分发到同一台后端服务器,用于缓存或会话的需要。

http {
    upstream backend {
        hash $request_uri;
        server backend1.example.com;
        server backend2.example.com;
    }
    
    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}

5)参数哈希(Parameter Hash):基于请求的特定参数进行散列计算,将具有相同参数值的请求分发到同一台后端服务器。

6)最小连接数(Least Connections):将请求分发给连接数最少的服务器,以确保服务器的负载尽可能均衡。

http {
    upstream backend {
        least_conn;
        server backend1.example.com;
        server backend2.example.com;
    }
    
    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}

7)最少响应时间(Least Time):根据服务器的响应时间进行选择,将请求分配给响应时间最短的服务器。

6.4 配置实例

要启用负载均衡,需要在Nginx主配置文件中添加一个upstream块来定义后端服务器的列表

然后,在相应的location块中使用proxy_pass指令指定负载均衡的上游服务器
在这里插入图片描述

6.4.1 使用轮询算法

配置部分

以后端服务器7-2和7-4为例

7-2 :192.168.2.100

7-4:192.168.2.104

7-1 代理服务器

#主配置文件中 http部分  写在日志下面
#先定义group1组

vim /apps/nginx/conf/nginx.conf

upstream group1{
    server 192.168.2.102;
    server 192.168.2.104;
}

在这里插入图片描述

#修改子配置文件
#修改location部分,加入
    pass_proxy http://group1/;

在这里插入图片描述

测试部分

#清空7-2和7-4的access.log
echo " " > /var/log/nginx/access.log

#实时追踪日志
tail -f /var/log/nginx/access.log


#切换到客户端,多次访问代理服务器7-1
curl 192.168.2.100 
#访问n次,观察7-2和7-4的日志

在这里插入图片描述

6.3.2 使用加权轮询

配置部分

7-1 代理服务器

#修改主配置文件
vim /apps/nginx/conf/nginx.conf

upstream group1{
    server 192.168.2.102 weight=3;
    server 192.168.2.104 weight=1;
}

在这里插入图片描述

测试部分

#清空7-2和7-4的access.log
echo " " > /var/log/nginx/access.log

#实时追踪日志
tail -f /var/log/nginx/access.log


#切换到客户端,多次访问代理服务器7-1
curl 192.168.2.100 
#访问n次,观察7-2和7-4的日志

在这里插入图片描述

6.3.3 备份-----使用backup参数

当所有后端服务器不可用时,才会启用此备用服务器

配置部分

7-1 代理服务器

#修改主配置文件
vim /apps/nginx/conf/nginx.conf

upstream group1{
    server 192.168.2.102 ;
    server 192.168.2.104 backup;
}
#104为备
7-2 后端服务器 主
#修改主页
echo "State Visit BYYB" > /usr/share/nginx/html/index.html

在这里插入图片描述

7-4 后端服务器作为备份服务器

#修改主页
echo "State Backup BYYB" > /usr/share/nginx/html/index.html

在这里插入图片描述

测试部分

浏览器访问
192.168.2.100

在这里插入图片描述

关闭7-2,再次访问,观察变化

在这里插入图片描述

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

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

相关文章

PCL error C4996和warning C4819 解决办法

每当新建一个项目时,常常会遇到这两个错误,这次记录一下解决办法加深记忆 1.error C4996 报错:error C4996 ‘pcl::PassThroughpcl::PointXYZ::setFilterLimitsNegative’: use inherited FilterIndices::setNegative() instead (It will b…

React 第一个Demo

0x00 前言 CTF 加解密合集CTF Web合集网络安全知识库 次笔记仅记录学习React过程中的笔记&#xff0c;因为有必要掌握一门前端的框架&#xff0c; 在vue和React中选择了React。 0x01 正文 目标&#xff1a; 实现Demo&#xff1a; <!DOCTYPE html> <html lang&q…

java-方法重载

定义&#xff1a;一个类中&#xff0c;出现多个方法名称相同&#xff0c;但是他们的行参列表不同&#xff0c;那么这些方法就称为方法重载了。

Hydra工具的使用

目录 Hydra初识 Hydra使用 hydra破解mysql 前言 不固定用户名密码爆破 hydra破解ssh 以用户名为密码登录 hydra破解rdp 将爆破密码的结果输出到文件中 Hydra初识 前言&#xff1a; hydra是一款开源的暴力破解工具&#xff0c;支持多种服务破解原理&#xff1a;使用户…

NSSCTF2nd与羊城杯部分记录

文章目录 前言[NSSCTF 2nd]php签到[NSSCTF 2nd]MyBox[NSSCTF 2nd]MyHurricane[NSSCTF 2nd]MyJs[NSSCTF 2nd]MyAPK羊城杯[2023] D0nt pl4y g4m3!!!羊城杯[2023]ezyaml羊城杯[2023]Serpent羊城杯[2023]EZ_web羊城杯[2023]Ez_misc总结 前言 今天周日&#xff0c;有点无聊没事干&a…

Java集合、泛型、增强For

集合的概念&#xff1a; 集合类存放的都是对象的引用&#xff0c;而非对象本身。 集合是一个动态的数组&#xff0c; 数组的长度是不可变的&#xff0c;集合长度是可变的 集合的类型&#xff1a; Collection接口&#xff1a; Collection表示一组对象&#xff…

springboot + vue + elementui — upload解决跨域、实现图片上传

今日记录通过elementui上传时得到的问题。 我们在本地部署的服务,前端服务请求后端接口,存在跨域问题&#xff0c; 1.可以利用springboot解决跨域问题&#xff0c;这里不列举 2.利用vue配置进行反向代理。 vue解决跨域 在vue.config.js文件中配置 const { defineConfig }…

nginx-gzip压缩

gzip压缩算法&#xff0c;在客户端要支持&#xff0c;在服务端浏览器也要支持该算法。 gzip动态压缩 nginx配置 gzip_buffers:缓冲区大小。 gzip_comp_level:压缩等级&#xff0c;1-9等级越高&#xff0c;压缩速率越高&#xff0c;压缩比也越高&#xff0c;当然消耗cpu资源…

chmod文件和目录的关系

结论&#xff1a;目录的权限和文件的权限并没啥关系&#xff0c;授权777后&#xff0c;在777的目录底下新增文件&#xff0c;默认还是只有当前用户有权限&#xff0c;不会有继承关系

sudo apt update 出现Release is not valid yet

一、问题 今天执行&#xff0c;下面的这命令报错。 sudo apt update二、成因 就是时钟问题&#xff0c;导致ssh认证不了&#xff0c;调正好就行。 三、解决方法 执行下面这行命令就可以正常了。 sudo hwclock --hctosys四、最后 求赞&#xff0c;求收藏&#xff01;&…

SW-重新组织装配体代替柔性装配体

柔性装配体容易报错&#xff0c;只有把简单的配合零件做用重新组织装配体的方式另存到顶层&#xff0c;以便与动画模拟

【Unity3D赛车游戏优化篇】【八】汽车实现镜头的流畅跟随,以及不同角度的切换

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

索引简单概述(SQL)

一、什么是索引&#xff1f; 索引是一种特殊的文件&#xff08;InnoDB数据表上的索引是表空间的一个组成部分&#xff09;&#xff0c;他们包含着对数据表里所有记录的引用指针。 索引是一种数据结构。数据库索引&#xff0c;是数据库管理系统中一个排序的数据结构&#xff0…

智慧公厕是智慧城市公共厕所形态的新一代技术支撑

在现代城市发展中&#xff0c;智慧城市正逐渐成为名副其实的未来趋势。作为城市基础设施的一部分&#xff0c;公共厕所的发展也与智慧城市息息相关。通过提升城市设施治理效率、实现数据开放与融合以及提升业务协同效率&#xff0c;智慧城市为公共厕所形态带来了全新的变革。本…

Python中的Numpy向量计算(R与Python系列第三篇)

目录 一、什么是Numpy? 二、如何导入NumPy? 三、生成NumPy数组 3.1利用序列生成 3.2使用特定函数生成NumPy数组 &#xff08;1&#xff09;使用np.arange() &#xff08;2&#xff09;使用np.linspace() 四、NumPy数组的其他常用函数 &#xff08;1&#xff09;np.z…

【论文解读】斯坦福小镇Generative Agents

git开源地址&#xff1a;GitHub - joonspk-research/generative_agents: Generative Agents: Interactive Simulacra of Human Behavior 论文地址&#xff1a;https://arxiv.org/abs/2304.03442 前言 最近很火的方向&#xff0c;利用GhatGPT的规划、对话、总结能力&#xff…

电商类面试问题--01Elasticsearch与Mysql数据同步问题

在实现基于关键字的搜索时&#xff0c;首先需要确保MySQL数据库和ES库中的数据是同步的。为了解决这个问题&#xff0c;可以考虑两层方案。 全量同步&#xff1a;全量同步是在服务初始化阶段将MySQL中的数据与ES库中的数据进行全量同步。可以在服务启动时&#xff0c;对ES库进…

Flink提交jar出现错误RestHandlerException: No jobs included in application.

今天打包一个flink的maven工程为jar&#xff0c;通过flink webUI提交&#xff0c;发现居然报错。 如上图所示&#xff0c;提示错误为&#xff1a; Server Response Message: org.apache.flink.runtime.rest.handler.RestHandlerException: No jobs included in application. …

6.网络编程套接字(上)

文章目录 1.网络编程基础1.1为什么需要网络编程&#xff1f;——丰富的网络资源1.2什么是网络编程1.3网络编程中的基本概念1.3.1发送端和接收端1.3.2请求和响应1.3.3客户端和服务端1.3.4常见的客户端服务端模型 2.Socket套接字2.1概念2.2分类2.3Java数据报套接字通信模型2.4Jav…

HTTPS协议详解:基本概念与工作原理

个人主页&#xff1a;insist--个人主页​​​​​​ 本文专栏&#xff1a;网络基础——带你走进网络世界 本专栏会持续更新网络基础知识&#xff0c;希望大家多多支持&#xff0c;让我们一起探索这个神奇而广阔的网络世界。 目录 一、HTTPS协议的基本概念 二、为什么需要HTTP…