Nginx高级配置及重写功能

news2024/11/24 3:01:19

文章目录

  • 一、高级配置
    • 网页的状态页
    • Nginx第三方模块
    • 变量
    • 访问日志
    • Nginx压缩功能
    • https功能
    • 自定义小图标
  • 二、重写功能(rewrite)
    • if指令
    • return指令
    • set指令
    • break指令
    • rewrite指令
    • 防盗链


一、高级配置

网页的状态页

状态页显示的是整个服务器的状态而非虚拟主机的状态。
状态页用于输出nginx的基本状态信息。

在这里插入图片描述
Active connections:
当前处于活动状态的客户端连接数,包括连接等待空闲连接数=reading+writing+waiting

accepts:
#统计总值,Nginx自启动后已经接受的客户端请求的总数。

handled:
#统计总值,Nginx自启动后已经处理完成的客户端请求总数,通常等于accepts,除非有因worker_connections限制等被拒绝的连接。

requests:
#统计总值,Nginx自启动后客户端发来的总的请求数。

Reading:
#当前状态,正在读取客户端请求报文首部的连接的连接数,数值越大,说明排队现象严重,性能不足。

Writing:
#当前状态,正在向客户端发送响应报文过程中的连接数,数值越大,说明访问量很大。

Waiting:
#当前状态,正在等待客户端发出请求的空闲连接数,开启 keep-alive的情况下,这个值等于active – (reading+writing)

注意:
这个界面展示的信息还是比较重要,故我们可以用访问控制,或者增加验证的模块的方式,使得这些参数较为安全。
在这里插入图片描述
可以用压力测试工具来模拟并发连接

while : ;do ab -c 1000 -n 10000 http://192.168.91.100/;sleep 1;done#注意需要安装httpd-tools

Nginx第三方模块

echo模块
在这里插入图片描述
不识别echo这个命令,所以需要额外安装echo模块。

基本步骤:
1.首先获取到第三方模块
2.yum安装完之后,用命令(nginx -V)查看相关函数
3.停止nginx服务,并重新编译

在这里插入图片描述
在这里插入图片描述
验证成功。

变量

内置变量

变量含义
$remote_addr;存放了客户端的地址,注意是客户端的公网IP
$proxy_add_x_forwarded_for此变量表示将客户端IP追加请求报文中X-Forwarded-For首部字段,多个IP之间用逗号分隔,如果请求中没有X-Forwarded-For,就使用$remote_addrthe 。穿透的时候会用到这个变量。
$args;变量中存放了URL中的参数,字符串变量 。http://www.222.org/main/index.do?id=20190221&partner=search;返回结果为: id=20190221&partner=search
document_root;nginx软件的根目录,在系统中的真正位置。
$document_uri;保存了当前请求中不包含参数的URI,注意是不包含请求的指令。客户端打在浏览器中 url
$host;服务器地址
$limit_rate如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置,则显示0
$remote_port;客户端的端口
$remote_user;虚拟用户登录nginx(经过Auth Basic Module验证的用户名)
$request_body_file;做反向代理时发给后端服务器的本地资源的名称
$request_method;请求资源的方式,GET/PUT/DELETE等
$request_filename当前请求的资源文件的磁盘路径,由root或alias指令与URI请求生成的文件绝对路径,如:/apps/nginx/html/main/index.html
$request_uri;包含请求参数的原始URI不包含主机名,相当于:$document_uri? $args,。如https:// www.baidu.com/main/index.do?则是/main/index.do?id=20190221&partner=search
$scheme;请求的协议,例如:http,https,ftp等
$server_protocol;保存了客户端请求资源使用的协议的版本,例如:HTTP/1.0,HTTP/1.1,HTTP/2.0等
$server_addr;保存了服务器的IP地址
$server_name;请求的服务器的主机名
$server_port;请求的服务器的端口号
$http_< name>name为任意请求报文首部字段,表示记录请求报文的首部字段
$http_user_agent;客户端浏览器的详细信息
$http_cookie;客户端的cookie信息
location /main {
        index index.html;#指示当请求的 URI 为 /main/ 时,默认返回  index.html 文件。
        default_type text/html;#文件默认类型为text/html
        echo "hello world,main-->";
        echo $remote_addr;
        echo $args;
    	echo $arg_user;
        echo $document_root;
        echo $document_uri;
        echo $host;
        echo $http_user_agent;
        echo $http_cookie;
        echo $request_filename;
        echo $scheme;
        echo $scheme://$host$document_uri?$args;
        }
测试
 curl 'http://www.cxk.com/main?user=wyf&title=person' -b uid=100

在这里插入图片描述
自定义变量
如果需要自定义变量名称和值,使用指令 set $变量名 变量值

在这里插入图片描述
在这里插入图片描述

访问日志

日志格式
访问日志是记录客户端即用户的具体请求内容信息,而在全局配置模块中的error_log是记录nginx服务器运行时的日志保存路径和记录日志的level,因此两者是不同的,而且Nginx的错误日志一般只有一个。而访问日志可以在不同server中定义多个,定义一个日志需要使用access_log指定日志的保存路径,使用log_format指定日志的格式,格式中定义要保存的具体日志内容。
在这里插入图片描述
日志格式可以根据上述的内置变量,自己添加。
如果在子配置文件中,用到自定义的日志格式,一定要将include写在日志格式下方,否则不生效。

自定义json 格式日志
在主配置文件夹中加入

log_format access_json '{"@timestamp":"$time_iso8601",'
        '"host":"$server_addr",'
        '"clientip":"$remote_addr",'
        '"size":$body_bytes_sent,'
        '"responsetime":$request_time,'
        '"upstreamtime":"$upstream_response_time",'
        '"upstreamhost":"$upstream_addr",'  
        '"http_host":"$host",'
        '"uri":"$uri",'
        '"xff":"$http_x_forwarded_for",'
        '"referer":"$http_referer",'
        '"tcp_xff":"$proxy_protocol_addr",'
        '"http_user_agent":"$http_user_agent",'
        '"status":"$status"}';

在这里插入图片描述

Nginx压缩功能

支持对指定类型的文件进行压缩然后再传输给客户端,而且压缩还可以设置压缩比例,压缩后的文件大小将比源文件显著变小,这样有助于降低出口带宽的利用率,降低企业的IT支出,不过会占用相应的CPU资源。

配置指令功能
gzip on/ off;启用或禁用gzip压缩,默认关闭
gzip_comp_level level;压缩比由低到高从1到9,默认为1
gzip_disable “MSIE [1-6].”;禁用IE6 gzip功能;后面跟的是正则表达式
gzip_http_version 1.0 /1.1;启用压缩功能时,协议的最小版本,默认HTTP/1.1
gzip_buffers number size;指定Nginx服务需要向服务器申请的缓存空间的个数和大小,平台不同,默认:32 4k或者16 8k;
gzip_types mime-type …; a.txt指明仅对哪些类型的资源执行压缩操作;默认为gzip_types text/html,不用显示指定,否则出错
gzip_vary on / off;如果启用压缩,是否在响应报文首部插入“Vary: Accept-Encoding”,一般建议打开
gzip_static on / off;预压缩,先压缩好,不用临时压缩,消耗cpu

在这里插入图片描述
在这里插入图片描述
注意:gzip不压缩图片!!!

https功能

Web网站的登录页面都是使用https加密传输的,加密数据以保障数据的安全,HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议,HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。

证书类型:
在这里插入图片描述
https过程
在这里插入图片描述

  1. 客户端发起HTTPS请求
    用户在浏览器里输入一个https网址,然后连接到服务器的443端口。

  2. 服务端的配置
    采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。

  3. 传送服务器的证书给客户端
    证书里其实就是公钥,并且还包含了很多信息,如证书的颁发机构,过期时间等等。

  4. 客户端解析验证服务器证书
    这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如:颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值。然后用证书中公钥对该随机值进行非对称加密。

  5. 客户端将加密信息传送服务器

这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

  1. 服务端解密信息

服务端将客户端发送过来的加密信息用服务器私钥解密后,得到了客户端传过来的随机值。

  1. 服务器加密信息并发送信息

服务器将数据利用随机值进行对称加密,再发送给客户端。

  1. 客户端接收并解密信息

客户端用之前生成的随机值解密服务段传过来的数据,于是获取了解密后的内容。

自签名证书生成过程
进入该文件夹下,先修改Makefile文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置ssl
nginx 的https 功能基于模块ngx_http_ssl_module实现,因此如果是编译安装的nginx要使用参数ngx_http_ssl_module开启ssl功能,但是作为nginx的核心功能,yum安装的nginx默认就是开启的,编译安装的nginx需要指定编译参数–with-http_ssl_module开启。

ssl on | off;   
#为指定的虚拟主机配置是否启用ssl功能,此功能在1.15.0废弃,使用listen [ssl]替代
listen 443 ssl;

ssl_certificate /path/to/file;
#指向包含当前虚拟主机和CA的两个证书信息的文件,一般是crt文件

ssl_certificate_key /path/to/file;
#当前虚拟主机使用的私钥文件,一般是key文件

在这里插入图片描述
在这里插入图片描述
访问成功。

自定义小图标

favicon.ico 文件是浏览器收藏网址时显示的图标,当客户端使用浏览器问页面时,浏览器会自己主动发起请求获取页面的favicon.ico文件,但是当浏览器请求的favicon.ico文件不存在时,服务器会记录404日志,而且浏览器也会显示404报错。
在这里插入图片描述

在这里插入图片描述

二、重写功能(rewrite)

Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求,此功能依靠 PCRE(perl compatible regular expression)即正则表达式,因此编译之前要安装PCRE库,rewrite是nginx服务器的重要功能之一,用于实现URL的重写,URL的重写是非常有用的功能,比如它可以在我们改变网站结构之后,不需要客户端修改原来的书签,也无需其他网站修改我们的链接,就可以设置为自动访问,另外还可以在一定程度上提高网站的安全性。

if指令

用于条件匹配判断,并根据条件判断结果选择不同的Nginx配置,可以配置在server或location块中进行配置,Nginx的if语法仅能使用if做单次判断,不支持使用if else或者if elif这样的多重判断,用法如下:

if (条件匹配) {   
 action
}

使用正则表达式对变量进行匹配。if指令认为条件为true,否则认为为flase,变量与表达式之间使用以下符号链接。

符号含义
=比较变量和字符串是否相等,相等时if指令认为该条件为true,反之为false
!=比较变量和字符串是否不相等,不相等时if指令认为条件为true,反之为false
~区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~区分大小写字符,判断是否匹配,不满足匹配条件为真,满足匹配条件为假
~*不区分大小写字符,可以通过正则表达式匹配,满足匹配条件为真,不满足匹配条件为假
!~*不区分大小字符,判断是否匹配,满足匹配条件为假,不满足匹配条件为真
-f 和 !-f判断请求的文件是否存在和是否不存在
-d 和 !-d判断请求的目录是否存在和是否不存在
-x 和 !-x判断文件是否可执行和是否不可执行
-e 和 !-e判断请求的文件或目录是否存在和是否不存在(包括文件,目录,软链接)

注意:如果$变量的值为空字符串或0,则if指令认为该条件为false,其他条件为true。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
注意:if执行顺序有先后,前面的if语句执行完后,会停止匹配。

return指令

return用于完成对请求的处理,并直接向客户端返回响应状态码,比如:可以指定重定向URL(对于特殊重定向状态码,301/302等) 或者是指定提示文本内容(对于特殊状态码403/500等),处于此指令后的所有配置都将不被执行,return可以在server、if 和 location块进行配置。

return语句的格式

return code; #返回给客户端指定的HTTP状态码
return code [text]; #返回给客户端的状态码及响应报文的实体内容,可以调用变量,其中text如果有空格,需要用单或双引号
return code url; #返回给客户端的URL地址  

在这里插入图片描述

在这里插入图片描述

set指令

set可以定义变量,变量值可以是固定的,也可以是nginx的内置变量。
在这里插入图片描述
在这里插入图片描述

break指令

用于中断当前相同作用域(location)中的其他Nginx配置,与该指令处于同一作用域的Nginx配置中,位于它前面的配置生效,位于后面的 ngx_http_rewrite_module 模块中指令就不再执行,Nginx服务器在根据配置处理请求的过程中遇到该指令的时候,回到上一层作用域继续向下读取配置,该指令可以在server块和location if块中使用。

简单来说:在同一location中,如果break后面有set rewrit return if等指令不执行,其他指令继续执行。
在这里插入图片描述
在这里插入图片描述
这边就不显示服务端端口号了,说明break指令生效。

rewrite指令

通过正则表达式的匹配来改变URI,可以同时存在一个或多个指令,按照顺序依次对URI进行匹配,rewrite主要是针对用户请求的URL或者是URI做具体处理。
rewrite可以配置在 server、location、if
语法格式

rewrite regex               replacement(www.baidu.com)        [flag];

注意:如果在同一级配置块中存在多个rewrite规则,那么会自上而下逐个检查;被某条件规则替换完成后,会重新一轮的替换检查,隐含有循环机制,但不超过10次;如果超过,提示500响应码,[flag]所表示的标志位用于控制此循环机制如果替换后的URL是以http://或https://开头,则替换结果会直接以重定向返回给客户端, 即永久重定向 301。

rewrite flag 使用介绍
利用nginx的rewrite的指令,可以实现url的重新跳转,rewrtie有四种不同的flag,分别是redirect(临时重定向302)、permanent(永久重定向301)、break和last。其中前两种是跳转型的flag,后两种是代理型

  • 跳转型指由客户端浏览器重新对新地址进行请求。
  • 代理型是在WEB服务器内部实现跳转。

flag说明:

flag含义
redirect临时重定向,重写完成后以临时重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求;使用相对路径,或者http://或https://开头,状态码:302
permanent重写完成后以永久重定向方式直接返回重写后生成的新URL给客户端,由客户端重新发起请求,状态码:301
break重写完成后,停止对当前URL在当前location中后续的其它重写操作,而后直接跳转至重写规则配置块之后的其它配置;结束循环,建议在location中使用;适用于一个URL一次重写
last;重写完成后,停止对当前URI在当前location中后续的其它重写操作,而后对新的URL启动新一轮重写检查,不建议在location中使用;适用于一个URL多次重写,要注意避免出现超过十次以及URL重写后返回错误的给用户301

场景:若bj代表北京,但现在又出现一个宝鸡也可用bj代表,故两者可能会发生冲突,所以决定使用beijing代表北京,baoji代表宝鸡。但为了不造成之前用户的流失需要将bj重定向至北京。
在这里插入图片描述
这边的$1表示后项引用。
在这里插入图片描述
在这里插入图片描述

整个网页的跳转
在这里插入图片描述
在这里插入图片描述
break和last的区别
break是立即终止匹配,使用该url进行访问。
last是停止本停止本location中的 匹配,开启新一轮的 location 匹配。
在这里插入图片描述
在这里插入图片描述

防盗链

防盗链基于客户端携带的referer实现,referer是记录打开一个页面之前记录是从哪个页面跳转过来的标记信息,如果别人只链接了自己网站图片或某个单独的资源,而不是打开了网站的整个页面,这就是盗链,referer就是之前的那个网站域名,正常的referer信息有以下几种:
none:#请求报文首部没有referer首部,比如用户直接在浏览器输入域名访问web网站,就没有referer信息
blocked:#请求报文有referer首部,但无有效值,比如为空
server_names:#referer首部中包含本主机名及即nginx 监听的server_name。
arbitrary_string:#自定义指定字符串,但可使用作通配符。示例: * .nginx.org www.nginx.
regular expression:#被指定的正则表达式模式匹配到的字符串,要使用开头,例如:.* \ .nginx \ . com

首先第二台服务器上配置一个网站(有图片)

<html>
<body>
<h1>this is nginx  </h1>
<img src="http://192.168.232.10/a.jpg"/>
</body>
</html>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
盗用成功。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
利用重定向返回图片。

location ~* \.(jpg|gif|swf|png)$ {            
         root  /data/nginx/pc;
         valid_referers none blocked *.pc.com pc.com;   
         if ( $invalid_referer ) {
           rewrite ^/ http://www.pc.com/error.png;
           #return  403
           }
        }
        
        
        
~* \.(jpg|gif|swf)$:这段正则表达式表示匹配不区分大小写,以.jpg 或.gif 或.swf 结尾的文件
Valid_referers:设置信任的网站,可以正常使用图片。
None :浏览器中 referer 为空的情况,就是直接在浏览器访问图片。
Blocked :referer 不为空的情况 ,但是值被代理或防火墙删除了,这些值不以 http://或https://开头。后面的网址或者域名:referer 中包含相关字符串的网址。
If 语句:如果链接的来源域名不在 valid_referers 所列出的列表中,$invalid_referer 为1,则执行后面的操作,即进行重写或返回 403 页面。

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

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

相关文章

LabVIEW在高校中的应用

LabVIEW 作为一款功能强大的图形化编程工具&#xff0c;在高校中有广泛的应用。它不仅用于教学实验&#xff0c;还广泛应用于科研项目和工程训练。本文将从教学、科研、实验室管理和学生技能培养等多个角度&#xff0c;详细分析LabVIEW在高校中的应用。 教学应用 课程设计 自动…

力扣2444.统计定界子数组的数目

力扣2444.统计定界子数组的数目 观察到不满足条件的数 可以作为天然的分割线 因此在枚举右端点的过程中 预处理minK&#xff0c;maxK和分割线上一次出现的下标 res min(min_i,max_i) - i0; 但是因为可能在到下个区段时 min_i和max_i尚未更新 导致结果为负数 所以要跟0再取一…

《Brave New Words 》2.2 阅读理解的未来,让文字生动起来!

Part II: Giving Voice to the Social Sciences 第二部分&#xff1a;为社会科学发声 The Future of Reading Comprehension, Where Literature Comes Alive! 阅读理解的未来&#xff0c;让文字生动起来&#xff01; Saanvi, a ninth grader in India who attends Khan World S…

SOA的设计模式_2.企业服务总线模式

1.企业服务总线&#xff08;|Enterprise Service Bus&#xff0c;ESB&#xff09; 在企业基于SOA实施EAI、B2B和BMP的过程中&#xff0c;如果采用点对点的集成方式存在着复杂度高&#xff0c;可管理性差&#xff0c;复用度差和系统脆弱等问题。企业服务总线&#xff08;…

vuInhub靶场实战系列--Kioptrix Level #2

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶场信息1.2 靶场配置 二、信息收集2.1 主机发现2.1.1 netdiscover2.1.2 nmap主机扫描2.1.3 arp-scan主机扫描 2.2 端口扫描…

打字侠是一款PWA网站,如何下载到电脑桌面?

嘿&#xff0c;亲爱的键盘侠们&#xff01; 你是否还在为寻找一款好用的打字练习工具而烦恼&#xff1f;别担心&#xff0c;今天我要给大家介绍一位超级英雄——打字侠&#xff01;它不仅是一个超级酷的打字练习网站&#xff0c;还是一款PWA&#xff08;渐进式网页应用&#x…

Python程序操作MySQL数据库教程

1.Python程序操作MySQL数据库&#xff1a; 使用pymysql安装包 使用&#xff1a; 1.导入pysql包 import pymysql 2.创建连接对象 调用pymysql模块中的connect&#xff08;&#xff09;函数来创建连接对象&#xff0c;代码如下&#xff1a; 连接对象说明&#xff1a; 关闭连接 co…

JAVA:通过电信ctg.ag.sdk从电信物联平台AIOT获取设备上报数据的简单示例

一、问题场景 物联设备比如NB设备通过NB协议将数据传到电信平台后&#xff0c;我们的应用服务如何从电信平台获取可用的上报数据。以下通过电信开发者平台提供的SDK来简单演示下整个过程。 二、使用电信 SDK进行开发 电信AIOT物联平台提供了两种方式获取平台数据&#xff0c…

Virtual Memory Primitives for User Program翻译

Virtual Memory Primitives for User Program 安德鲁阿普尔&#xff08;Andrew Appel&#xff09;和李凯&#xff08;Kai Li&#xff09; 普林斯顿大学计算机科学系 摘要 传统上&#xff0c;内存管理单元&#xff08;MMUS&#xff09;被操作系统用于实现磁盘分页的虚拟内存…

cisco packet tracer 8.2.2 安装配置 基础教程 免登录免破解 简单方便

1 官网下载&#xff0c;需要账号 2 安装 3 启动之前&#xff0c;直接断网&#xff0c;禁用网卡(⊙﹏⊙) #汉化 #重新打开Cisco Packet Tracer

Apollo9.0 PNC源码学习之Control模块(一)

0 前言 从planning的角度看control&#xff0c;首先需要了解的就是相关的数据接口&#xff0c;规划出的轨迹&#xff08;路径速度&#xff09;发给Control模块去执行 modules/planning/planning_component/planning_component.cc planning模块发布轨迹信息 planning_writer_ …

计算机网络9——无线网络和移动网络2无线个人区域网 WPAN

文章目录 一、蓝牙系统二、低速 WPAN三、高速 WPAN 无线个人区域网WPAN(Wireless Personal Area Network)就是在个人工作的地方把属于个人使用的电子设备(如便携式电脑、平板电脑、便携式打印机以及蜂窝电话等)用无线技术连接起来自组网络&#xff0c;不需要使用接入点AP&#…

DP:回文串模型

一、回文子串 . - 力扣&#xff08;LeetCode&#xff09; 该题有3种解法 &#xff08;1&#xff09;中心扩展算法&#xff08;在字符串章节有介绍&#xff09;时间复杂度O&#xff08;N^2&#xff09;,空间复杂度O&#xff08;1&#xff09; &#xff08;2&#xff09;马丁车…

小冬瓜AIGC 手撕LLM 拼课

小冬瓜aigc手撕LLM学习 官方认证 手撕LLMRLHF速成班-(附赠LLM加速分布式训练超长文档&#xff09; 帮助多名同学上岸LLM方向&#xff0c;包括高校副教授&#xff0c;北美PhD&#xff0c;大厂等 课程名称【手撕LLMRLHF】 授课形式&#xff1a;在线会议直播讲解课后录播 时间&…

Nvidia的成功与竞争:CEO黄仁勋的自信与挑战

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【将xml文件转yolov5训练数据txt标签文件】连classes.txt都可以生成

将xml文件转yolov5训练数据txt标签文件 前言一、代码解析 二、使用方法总结 前言 找遍全网&#xff0c;我觉得写得最详细的就是这个博文⇨将xml文件转yolov5训练数据txt标签文件 虽然我还是没有跑成功。那个正则表达式我不会改QWQ&#xff0c;但是不妨碍我会训练ai。 最终成功…

LangChain基础知识入门

LangChain的介绍和入门 1 什么是LangChain LangChain由 Harrison Chase 创建于2022年10月&#xff0c;它是围绕LLMs&#xff08;大语言模型&#xff09;建立的一个框架&#xff0c;LLMs使用机器学习算法和海量数据来分析和理解自然语言&#xff0c;GPT3.5、GPT4是LLMs最先进的代…

架构设计-用户信息及用户相关的密码信息设计

将用户的基本信息和用户密码存放在不同的数据库表中是一种常见的安全做法&#xff0c;这种做法旨在增强数据的安全性和管理的灵活性。以下是这种做法的几个关键原因&#xff1a; 安全性增强&#xff1a; 当用户密码被单独存放在一个表中时&#xff0c;可以使用更强大的加密和哈…

kafka集成SpringBoot api编写教程

1.新建项目 用的idea是20222.1.3版本&#xff0c;没有Spring Initializr 插件&#xff0c;不能直接创建springboot项目 可以在以下网址创建项目&#xff0c;下载后解压&#xff0c;然后用idea打开项目即可 1.1 在 https://start.spring.io/ 上创建项目 1.2上传到linux&#x…

C语言 | Leetcode C语言题解之第140题单词拆分II

题目&#xff1a; 题解&#xff1a; struct Trie {int ch[26];bool flag; } trie[10001];int size;void insert(char* s, int sSize) {int add 0;for (int i 0; i < sSize; i) {int x s[i] - a;if (trie[add].ch[x] 0) {trie[add].ch[x] size;memset(trie[size].ch, 0…