解锁Nginx路由器匹配规则

引言

Nginx 无疑是一款备受瞩目的明星产品。它以其高性能、高可靠性以及出色的并发处理能力,在众多 Web 服务器和反向代理服务器中脱颖而出 ,广泛应用于各类网站和应用程序中。据统计,超过 30% 的网站都在使用 Nginx 作为其 Web 服务器,在全球前 1000 个网站中,更是有 47.1% 的网站选择了 Nginx。从早期的俄罗斯开发者 Igor Sysoev 为解决 C10K 问题而开发,到如今成为互联网基础设施中不可或缺的一部分,Nginx 的发展历程见证了它的强大实力。

Nginx 之所以如此受欢迎,是因为它具备诸多优势。在性能方面,采用异步非阻塞的事件驱动模型,能够高效处理大量并发连接,这使得它特别适合处理高流量网站,轻松应对高并发场景,即使在资源受限的环境中也能表现出色。同时,Nginx 占用资源少,启动迅速,体现出了轻量级的特点。从功能上看,它支持模块化设计,可以通过插件扩展功能,满足不同需求,无论是作为反向代理、负载均衡系统,还是充当 SSL/TLS 终结器、Web 加速器,又或是内容缓存服务器,Nginx 都能胜任。而且,Nginx 配置简单灵活,能适应复杂的网络环境,再加上强大的社区支持,有大量的教程和扩展可供学习和应用,这些都让它成为构建现代、高效、可靠 Web 架构的关键组件。

而在 Nginx 的众多功能中,路由器匹配规则扮演着举足轻重的角色。它就像是一位精准的导航员,负责将客户端的请求准确无误地路由到对应的服务器资源上。通过合理配置路由器匹配规则,我们能够实现诸如反向代理、负载均衡、静态资源服务等一系列重要功能。在实际的 Web 开发项目中,正确理解和运用 Nginx 路由器匹配规则,不仅可以提高应用程序的性能和响应速度,还能增强系统的稳定性和可扩展性。例如,在一个大型电商网站中,通过巧妙配置 Nginx 路由器匹配规则,可以将静态资源请求快速导向专门的静态文件服务器,减轻应用服务器的负载;同时,将动态请求合理分配到不同的后端服务器上,实现负载均衡,确保网站在高并发情况下依然能够稳定运行,为用户提供流畅的购物体验。所以,深入学习 Nginx 路由器匹配规则,对于每一位 Web 开发者来说,都是至关重要的。接下来,就让我们一起揭开 Nginx 路由器匹配规则的神秘面纱。

Nginx 路由器匹配规则基础

(一)规则分类与简介

Nginx 路由器匹配规则丰富多样,主要可分为以下六种类型,它们在请求处理过程中各自发挥着独特作用,并且具有明确的优先级顺序 :

  • 精确匹配(=):使用 “=” 修饰符,这是匹配规则中优先级最高的。当请求的 URI 与指定的字符串完全相等时,就会触发精确匹配,一旦匹配成功,Nginx 便会立即停止搜索其他匹配项,直接使用该规则处理请求 。例如,location = /index.html,只有当请求的 URL 精确为/index.html时才会匹配此规则。在一个企业官网项目中,对于首页index.html的频繁请求,通过精确匹配可以快速将请求定位到对应的资源,大大提高响应速度。

  • 精确前缀匹配(^~):优先级仅次于精确匹配。当请求的 URI 以指定的字符串为开头时,会触发精确前缀匹配 ,匹配成功后,Nginx 会停止继续搜索其他匹配项,转而采用该规则处理请求。比如location ^~ /static/,只要请求的 URL 是以/static/开头,就会匹配此规则,常用于处理静态资源请求。像电商网站中的静态图片、样式文件等资源,通过精确前缀匹配可以高效地将它们分配到专门的静态资源服务器上进行处理。

  • 区分大小写的正则匹配(~):利用 “~” 修饰符实现区分大小写的正则表达式匹配。在精确匹配和精确前缀匹配失败后,Nginx 会尝试进行正则匹配。这种匹配方式能够根据正则表达式的模式,对请求的 URI 进行灵活匹配,但要注意正则表达式的语法和性能消耗问题。例如location ~ .php$,可以匹配所有以.php结尾的请求,在处理 PHP 动态页面请求时经常会用到。

  • 不区分大小写的正则匹配(~*):与区分大小写的正则匹配类似,不过使用 “~” 修饰符,它在匹配时不区分 URI 的大小写。例如location ~ .(jpg|jpeg|png|gif)$,可以匹配所有以.jpg、.jpeg、.png、.gif结尾的图片请求,无论是大写还是小写的文件扩展名都能匹配 ,方便处理图片资源的请求,在一些对图片资源访问频繁的网站,如图片分享网站中应用广泛。

  • 普通前缀匹配(/uri):这种匹配方式没有特殊的修饰符,直接在location后跟上需要匹配的 URI。它的优先级低于正则匹配,当请求的 URI 以指定的字符串为开头时,会匹配该规则,但匹配成功后还会继续搜索其他更精确的匹配规则 。比如location /docs/,会匹配所有以/docs/开头的请求。在一个文档管理系统中,通过普通前缀匹配可以将所有与文档相关的请求定位到对应的处理逻辑。

  • 通用匹配(/):使用 “/” 表示,它可以匹配所有请求,优先级最低。当其他所有匹配规则均失效时,请求就会被路由给通用匹配规则处理;如果没有配置通用匹配,并且其他匹配规则都不匹配,Nginx 会返回 404 错误。它就像是一个兜底的规则,确保所有请求都能得到处理,在大多数 Nginx 配置中,通用匹配规则是必不可少的,保证了系统的完整性和稳定性。

(二)规则详解

  1. 精确匹配(=):精确匹配在 Nginx 路由匹配中具有最高优先级。以location = /test为例,只有当客户端请求的 URL 路径精确为/test时,才会命中该规则。在一个论坛系统中,如果有一个特定的页面,如用户协议页面/user_agreement,使用精确匹配location = /user_agreement,可以确保只有对这个页面的精确请求才能被正确处理,避免其他相似路径的误匹配。一旦精确匹配成功,Nginx 会立即停止搜索其他匹配项,直接执行该location块中的配置,这使得处理效率大大提高,因为不需要再进行其他不必要的匹配检查。

  2. 精确前缀匹配(^~):精确前缀匹配的优先级仅次于精确匹配。例如location ^~ /static/,只要请求的 URL 路径以/static/开头,就会匹配此规则。在一个大型网站中,静态资源(如 CSS、JavaScript、图片等)通常会集中存放在/static/目录下,通过精确前缀匹配,Nginx 可以快速将这些静态资源请求转发到专门的静态资源服务器上,提高处理速度。当匹配成功后,Nginx 会停止继续搜索其他匹配项,包括正则匹配,这对于提高静态资源的访问效率非常重要,避免了不必要的正则匹配开销。

  3. 区分大小写的正则匹配(~):在精确匹配和精确前缀匹配失败后,Nginx 会尝试进行正则匹配。区分大小写的正则匹配使用 “~” 修饰符。例如location ~ .html$,它可以匹配所有以.html结尾的请求,并且区分大小写。在一个博客系统中,文章页面通常以.html结尾,通过这样的正则匹配,可以将文章页面的请求准确地路由到对应的处理逻辑。正则匹配之间没有优先级之分,而是按照在配置文件中出现的顺序进行匹配,一旦匹配上一个,就会停止向下继续搜索。所以在配置正则匹配时,要注意顺序,将更常用、更精确的规则放在前面,以提高匹配效率。

  4. 不区分大小写的正则匹配(~*):不区分大小写的正则匹配使用 “~” 修饰符,在匹配时不考虑 URI 的大小写。比如location ~ .(js|css)$,可以匹配所有以.js或.css结尾的请求,无论文件扩展名是大写还是小写。在一个前端项目中,JavaScript 和 CSS 文件的引用可能存在大小写不一致的情况,使用不区分大小写的正则匹配可以确保这些资源请求都能被正确处理。同样,正则匹配按照配置文件中的顺序进行匹配,一旦找到匹配的规则,就会停止后续的匹配过程。

  5. 普通前缀匹配(/uri):普通前缀匹配直接在location后写需要匹配的 URI,如location /images/,会匹配所有以/images/开头的请求。在一个图片展示网站中,所有图片资源都存放在/images/目录下,通过普通前缀匹配可以将图片请求转发到相应的图片处理模块。它的优先级低于正则匹配,当匹配成功后,还会继续搜索其他更精确的匹配规则,直到找到最合适的处理方式。如果有多个普通前缀匹配规则都能匹配请求,Nginx 会选择匹配字符串最长的那个规则。

  6. 通用匹配(/):通用匹配使用 “/” 表示,它能匹配所有请求,是 Nginx 路由匹配的最后一道防线。当其他所有匹配规则都无法匹配请求时,就会采用通用匹配规则。例如,在一个综合性网站中,可能会有一些未知的请求路径,通过通用匹配,可以将这些请求转发到默认的处理逻辑,避免返回 404 错误,保证用户体验。通常在 Nginx 配置文件的最后会设置一个通用匹配规则,如location / { proxy_pass http://backend_server; },将请求转发到后端服务器进行处理 。

实例分析

(一)完整配置示例

以下是一个包含多种匹配规则的 Nginx 配置文件示例,通过对这个示例的分析,我们能更深入地理解不同匹配规则在实际应用中的作用以及它们之间的相互关系 :

server {listen       80;server_name  example.com;# 精确匹配location = / {root   /usr/share/nginx/html/home;index  index.html;}# 精确前缀匹配location ^~ /static/ {root   /usr/share/nginx/html;expires 30d;}# 区分大小写的正则匹配location ~ \.php$ {fastcgi_pass   127.0.0.1:9000;fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;include        fastcgi_params;}# 不区分大小写的正则匹配location ~* \.(jpg|jpeg|png|gif)$ {root   /usr/share/nginx/html/images;expires 7d;}# 普通前缀匹配location /docs/ {root   /usr/share/nginx/html;index  docs_index.html;}# 通用匹配location / {proxy_pass   http://backend_server;}
}

在这个配置文件中:

  • 精确匹配(location = /:当用户访问网站根目录/时,会被精确匹配到这个规则。Nginx 会将请求的文件根目录设置为/usr/share/nginx/html/home,并返回index.html文件,这个规则优先级最高,一旦匹配成功,就不会再进行其他匹配。比如在一个企业官网项目中,对于首页的访问,通过精确匹配可以快速返回首页内容,提高用户访问速度。

  • 精确前缀匹配(location ^~ /static/:所有以/static/开头的请求,都会被这个规则匹配。Nginx 会将文件根目录设置为/usr/share/nginx/html,并且设置这些静态资源的缓存过期时间为 30 天。在一个电商网站中,大量的静态资源,如图片、CSS、JavaScript 文件等,通过精确前缀匹配可以高效地将它们分配到专门的静态资源服务器上进行处理,提高网站的加载速度。

  • 区分大小写的正则匹配(location ~ .php$:用于匹配所有以.php结尾的请求。当请求的 URL 以.php结尾时,Nginx 会将请求转发到本地的 FastCGI 服务器(127.0.0.1:9000)进行 PHP 脚本的处理。在一个基于 PHP 开发的论坛系统中,所有动态页面的请求,如用户发表帖子、查看帖子等操作,都是以.php结尾的,通过这个正则匹配可以将这些请求准确地路由到对应的处理逻辑。

  • 不区分大小写的正则匹配(location ~* .(jpg|jpeg|png|gif)$:可以匹配所有以.jpg、.jpeg、.png、.gif结尾的图片请求,无论文件扩展名是大写还是小写。Nginx 会将文件根目录设置为/usr/share/nginx/html/images,并设置这些图片资源的缓存过期时间为 7 天。在一个图片分享网站中,用户上传的图片格式可能多种多样,且文件名的大小写也不一致,通过不区分大小写的正则匹配可以确保所有图片请求都能被正确处理。

  • 普通前缀匹配(location /docs/:所有以/docs/开头的请求会被匹配到这个规则。Nginx 会将文件根目录设置为/usr/share/nginx/html,并返回docs_index.html文件。在一个文档管理系统中,所有与文档相关的请求,如查看文档列表、阅读文档内容等,都是以/docs/开头的,通过普通前缀匹配可以将这些请求定位到对应的处理逻辑。

  • 通用匹配(location /:作为最后的兜底规则,当其他所有匹配规则都无法匹配请求时,会采用这个规则。Nginx 会将请求转发到后端服务器http://backend_server进行处理。在一个综合性网站中,可能会有一些未知的请求路径,通过通用匹配,可以将这些请求转发到默认的处理逻辑,避免返回 404 错误,保证用户体验。

(二)不同请求的匹配结果分析

针对上述示例配置,下面列举一些不同的请求 URI,并分析它们分别匹配到的规则,让读者更直观地理解匹配过程:

  • 请求**/**:精确匹配规则location = /生效,Nginx 会从/usr/share/nginx/html/home目录下返回index.html文件。因为精确匹配的优先级最高,一旦匹配成功,就不会再检查其他规则。

  • 请求**/static/css/style.css**:精确前缀匹配规则location ^~ /static/匹配成功。Nginx 会从/usr/share/nginx/html/static目录下查找css/style.css文件,并返回给客户端,同时设置缓存过期时间为 30 天。由于精确前缀匹配成功后,会停止继续搜索其他匹配项,所以不会再去检查正则匹配和普通前缀匹配。

  • 请求**/article.php**:区分大小写的正则匹配规则location ~ .php 生效。 N g i n x 会将该请求转发到 F a s t C G I 服务器( 127.0.0.1 : 9000 )进行 P H P 脚本的处理。在精确匹配和精确前缀匹配失败后, N g i n x 会尝试进行正则匹配,按照正则表达式的模式,这个请求会被 l o c a t i o n p ˙ h p 生效。Nginx 会将该请求转发到 FastCGI 服务器(127.0.0.1:9000)进行 PHP 脚本的处理。在精确匹配和精确前缀匹配失败后,Nginx 会尝试进行正则匹配,按照正则表达式的模式,这个请求会被location ~ \.php 生效。Nginx会将该请求转发到FastCGI服务器(127.0.0.1:9000)进行PHP脚本的处理。在精确匹配和精确前缀匹配失败后,Nginx会尝试进行正则匹配,按照正则表达式的模式,这个请求会被location p˙hp匹配到。

  • 请求**/image.PNG**:不区分大小写的正则匹配规则location ~* .(jpg|jpeg|png|gif)$匹配成功。Nginx 会从/usr/share/nginx/html/images目录下查找image.PNG文件,并返回给客户端,同时设置缓存过期时间为 7 天。因为这个正则匹配不区分大小写,所以能够匹配到以.PNG结尾的请求。

  • 请求**/docs/about.html**:普通前缀匹配规则location /docs/匹配成功。Nginx 会从/usr/share/nginx/html/docs目录下查找about.html文件,并返回给客户端。普通前缀匹配的优先级低于正则匹配,当匹配成功后,还会继续搜索其他更精确的匹配规则,但在这个例子中,没有更精确的匹配规则了,所以就采用这个规则处理请求。

  • 请求**/unknown_path**:其他所有匹配规则都无法匹配,通用匹配规则location /生效。Nginx 会将请求转发到后端服务器http://backend_server进行处理。通用匹配规则就像是一个兜底的规则,确保所有请求都能得到处理,避免返回 404 错误。

常见问题与解决方案

(一)匹配冲突问题

在实际的 Nginx 配置过程中,匹配冲突是较为常见的问题,它会导致请求无法按照预期的规则进行路由,从而影响系统的正常运行。其中,正则匹配与普通前缀匹配冲突是比较典型的情况。

例如,当配置了location /static/ { proxy_pass http://static_server; }(普通前缀匹配)和location ~ /static/..js$ { proxy_pass http://js_server; }(正则匹配)时,如果请求的 URI 为/static/jquery.js,就会出现匹配冲突。这是因为普通前缀匹配规则/static/会首先匹配到该请求,按照规则,它会继续搜索其他更精确的匹配规则,此时正则匹配规则/static/..js$也能匹配到该请求。由于这两种匹配规则都对同一请求有效,就产生了冲突,Nginx 无法明确应该使用哪条规则来处理请求,可能会导致请求被错误路由。

再比如,在一个新闻网站的 Nginx 配置中,配置了location /news/ { proxy_pass http://news_backend; }(普通前缀匹配)用于处理所有新闻相关的请求,同时又配置了location ~ /news/\d+ { proxy_pass http://news_detail_backend; }(正则匹配)用于处理新闻详情页面的请求,这里\d+表示匹配一个或多个数字。当请求的 URI 为/news/123时,普通前缀匹配规则/news/和正则匹配规则/news/\d+都能匹配到该请求,从而产生冲突。如果不能正确处理这种冲突,可能会导致用户无法正常访问新闻详情页面,或者新闻列表页面的请求被错误地转发到新闻详情页面的后端服务器。

(二)解决方法

针对匹配冲突问题,可以采用以下几种方法来解决:

  1. 调整规则顺序:根据 Nginx 匹配规则的优先级和匹配顺序,合理调整规则在配置文件中的顺序。将更精确、更具体的规则放在前面,确保先匹配到最符合需求的规则。在上面新闻网站的例子中,将location ~ /news/\d+ { proxy_pass http://news_detail_backend; }(正则匹配)放在location /news/ { proxy_pass http://news_backend; }(普通前缀匹配)之前,这样当请求/news/123时,会先匹配到正则匹配规则,将请求正确地转发到新闻详情页面的后端服务器,避免了冲突。

  2. 合理使用修饰符:充分利用精确匹配(=)和精确前缀匹配(^~)修饰符,使匹配规则更加明确。如果某个请求需要绝对精确匹配,不希望被其他规则干扰,就使用精确匹配修饰符 “=”。比如,对于网站的根目录请求/,如果希望它被精确匹配到特定的处理逻辑,可以配置location = / { proxy_pass http://root_server; }。而精确前缀匹配修饰符 “^~” 可以在匹配到指定前缀后,停止继续搜索其他匹配项,包括正则匹配,从而避免冲突。在处理静态资源请求时,配置location ^~ /static/ { proxy_pass http://static_server; },可以确保所有以/static/开头的请求都被准确地转发到静态资源服务器,不会再被其他正则匹配规则干扰。

  3. 使用命名 location:通过使用命名 location,将不同功能的请求处理逻辑分开,避免冲突。例如,可以配置location / { try_files $uri $uri/ @fallback; }和location @fallback { proxy_pass http://fallback_server; }。这里,@fallback是一个命名 location,当普通的请求匹配规则都无法匹配请求时,会跳转到@fallback这个命名 location 进行处理,将请求转发到http://fallback_server,这样可以将特殊的处理逻辑与常规的匹配规则分开,减少冲突的可能性。

通过以上方法,可以有效地解决 Nginx 路由器匹配规则中的冲突问题,确保请求能够按照预期的方式进行路由,提高系统的稳定性和可靠性。

实际应用场景

(一)反向代理

在反向代理场景中,Nginx 的路由器匹配规则发挥着关键作用。当客户端发起请求时,Nginx 会根据配置的匹配规则,将请求准确无误地转发到对应的后端服务器。

以一个大型电商平台为例,假设该平台有多个后端服务器,分别负责处理不同类型的业务请求。其中,服务器 A 专门处理商品展示相关的请求,服务器 B 负责用户订单处理,服务器 C 处理支付相关业务。通过 Nginx 的反向代理配置,当用户访问http://www.example.com/products/路径下的页面时,Nginx 会根据配置的location /products/普通前缀匹配规则,将请求转发到服务器 A;当用户进行下单操作,请求http://www.example.com/orders/路径时,Nginx 依据location /orders/规则,将请求转发到服务器 B;而当涉及支付请求,访问http://www.example.com/payment/路径时,Nginx 通过location /payment/规则,将请求转发给服务器 C 。这样,Nginx 就像一个智能的交通枢纽,将不同的请求引导到合适的后端服务器,实现了业务的分离和高效处理。

在这个过程中,精确匹配和精确前缀匹配规则可以确保一些特定的、重要的请求被快速准确地路由。例如,对于电商平台的首页http://www.example.com/,可以使用精确匹配location = /,将请求直接转发到负责首页展示的服务器,提高首页的加载速度和响应效率。而对于一些静态资源,如图片、CSS、JavaScript 文件等,存放在/static/目录下,通过精确前缀匹配location ^~ /static/,可以将这些静态资源请求快速转发到专门的静态资源服务器,减轻后端业务服务器的负载,同时利用缓存机制提高静态资源的访问速度 。

通过 Nginx 的反向代理和匹配规则,不仅提高了网站的性能,将负载合理分配到不同的后端服务器,避免了单个服务器的过载;还增强了网站的安全性,隐藏了后端服务器的真实 IP 地址,降低了被攻击的风险,为用户提供了更加稳定、高效的服务体验。

(二)静态资源处理

在 Web 应用中,静态资源(如图片、CSS、JS 等文件)的加载速度对用户体验有着重要影响。Nginx 的路由器匹配规则为优化静态资源的访问提供了有效手段。

以一个内容丰富的资讯网站为例,每天有大量用户访问,网站包含海量的图片、样式文件和脚本文件。通过 Nginx 的匹配规则,可以将这些静态资源的请求进行高效处理。例如,对于所有的图片请求,使用不区分大小写的正则匹配规则location ~* .(jpg|jpeg|png|gif)$,将请求匹配到对应的图片资源目录。当用户浏览一篇新闻文章,请求文章中的图片时,Nginx 根据这个规则,快速定位到图片所在的目录,如/usr/share/nginx/html/images,并将图片返回给用户。同时,可以设置图片资源的缓存过期时间,如expires 7d,这样在 7 天内,用户再次访问相同的图片时,直接从浏览器缓存中获取,减少了对服务器的请求,大大提高了加载速度。

对于 CSS 和 JS 文件,同样可以利用匹配规则进行优化。使用location ~ .(css|js)$区分大小写的正则匹配规则,将 CSS 和 JS 文件的请求匹配到相应的目录。在网站加载过程中,当浏览器请求样式文件和脚本文件时,Nginx 根据规则快速响应,确保这些文件能够及时加载,使页面能够正确渲染和实现各种交互功能。为了进一步提高性能,还可以启用 Nginx 的 gzip 压缩功能,对传输的静态资源进行压缩,减少数据传输量,加快加载速度 。

通过合理运用 Nginx 的路由器匹配规则,对静态资源进行专门的处理和优化,不仅可以提高网站的加载速度,提升用户体验,还能减轻后端服务器的负担,提高整个系统的运行效率,使网站在高并发的情况下也能稳定运行 。

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

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

相关文章

传统策略梯度方法的弊端与PPO的改进:稳定性与样本效率的提升

为什么传统策略梯度方法(如REINFORCE算法)在训练过程中存在不稳定性和样本效率低下的问题 1. 传统策略梯度方法的基本公式 传统策略梯度方法的目标是最大化累积奖励的期望值。具体来说,优化目标可以表示为: max ⁡ θ J ( θ )…

Qwt入门

Qwt(Qt Widgets for Technical Applications)是一个用于科学、工程和技术应用的 Qt 控件库,提供曲线图、仪表盘、刻度尺等专业可视化组件。 1. 安装与配置 1.1 安装方式 源码编译(推荐): git clone https://github.com/qwt/qwt.git cd qwt qmake qwt.pro # 生成 Makef…

软考《信息系统运行管理员》- 6.1 信息系统安全概述

信息系统安全的概念 信息系统安全是指保障计算机及其相关设备、设施(含网络)的安全,运行环境的安全, 信息的安全,实现信息系统的正常运行。 信息系统安全包括实体安全、运行安全、信息安全和 人员安全等几个部分。 影响信息系统安全的因素…

Canvas实现旋转太极八卦图

Canvas实现旋转太极八卦图 项目简介 这是一个使用HTML5 Canvas技术实现的动态太极八卦图,包含了旋转动画和鼠标交互功能。项目展示了中国传统文化元素与现代Web技术的结合。 主要特点 动态旋转的太极图八卦符号的完整展示鼠标悬停暂停动画流畅的动画效果 技术实…

机器学习、深度学习和神经网络

机器学习、深度学习和神经网络 术语及相关概念 在深入了解人工智能(AI)的工作原理以及它的各种应用之前,让我们先区分一下与AI密切相关的一些术语和概念:人工智能、机器学习、深度学习和神经网络。这些术语有时会被交替使用&#…

打造高性能中文RAG系统:多轮对话与语义检索的完美结合

目录 1、引言 2、RAG系统的核心架构 3、对话理解:超越单轮问答 3.1、指代消解技术 3.2、话题跟踪与记忆 4、混合检索策略:兼顾精确与广泛 4.1、向量检索 关键词检索 4.2、重排序机制 5、性能优化:应对大规模文档 5.1、向量量化技术…

人工智能助力数字化转型:生成式人工智能(GAI)认证开启新篇章

在数字化浪潮席卷全球的今天,企业正面临着前所未有的转型压力与机遇。数字化转型,这一曾经被视为“选择题”的战略议题,如今已演变为关乎企业生存与发展的“必答题”。在这场深刻的变革中,人工智能(AI)作为…

Windows 图形显示驱动开发-WDDM 2.4功能-GPU 半虚拟化(十二)

DxgkDdiQueryAdapterInfo 更新 DXGKARG_QUERYADAPTERINFO 结构已更新,以包括以下字段以支持半虚拟化: 添加了 Flags 成员,允许 Dxgkrnl 指示以下内容: 它将 VirtualMachineData 设置为指示调用来自 VM。它将 SecureVirtualMach…

iOS审核被拒:Missing privacy manifest 第三方库添加隐私声明文件

问题: iOS提交APP审核被拒,苹果开发者网页显示二进制错误,收到的邮件显示的详细信息如下图: 分析: 从上面信息能看出第三方SDK库必须要包含一个隐私文件,去第三方库更新版本。 几经查询资料得知,苹果在…

马达加斯加企鹅字幕

Antarctica 南极洲 An inhospitable wasteland 一个荒凉的不毛之地 But even here 但即使在这里 on the Earth’s frozen bottom 地球另一端的冰天雪地里 we find life 也有生命存在 And not just any life 不是别的什么生物 Penguins 而是企鹅 Joyous, frolicking 快乐的 顽皮…

爱因斯坦求和 torch

目录 向量点积 矩阵乘法 矩阵转置 向量转换相机坐标系 在 Python 的科学计算库(如 NumPy)中,einsum 是一个强大的函数,它可以简洁地表示各种张量运算。下面是几个不同类型的使用示例: 向量点积 向量点积是两个向量…

FPGA调试笔记

XILINX SSTL属性电平报错 错误如下: [DRC BIVRU-1] Bank IO standard Vref utilization: Bank 33 contains ports that use a reference voltage. In order to use such standards in a bank that is not configured to use INTERNAL_VREF, the banks VREF pin mu…

一区严选!挑战5天一篇脂质体组学 DAY1-5

Day 1! 前期已经成功挑战了很多期NHANES啦!打算来试试孟德尔随机化领域~ 随着孟德尔随机化研究的普及,现在孟德尔发文的难度越来越高,简单的双样本想被接收更是难上加难,那么如何破除这个困境,这次我打算…

DataGear 5.3.0 制作支持导出表格数据的数据可视化看板

DataGear 内置表格图表底层采用的是DataTable表格组件,默认并未引入导出数据的JS支持库,如果有导出表格数据需求,则可以在看板中引入导出相关JS支持库,制作具有导出CSV、Excel、PDF功能的表格数据看板。 在新发布的5.3.0版本中&a…

【个人笔记】用户注册登录思路及实现 springboot+mybatis+redis

基本思路 获取验证码接口 验证码操作用了com.pig4cloud.plugin的captcha-core这个库。 AccountControl的"/checkCode"接口代码,通过ArithmeticCaptcha生成一张验证码图片,通过text()函数得到验证码的答案保存到变量code,然后把图…

Linux网络编程概述

Linux网络编程是在Linux操作系统环境下进行的网络相关程序开发,主要用于实现不同计算机之间的数据通信和资源共享。以下从基础知识、网络编程模型、常用函数和编程步骤等方面进行详细介绍: 基础知识 1. 网络协议 TCP/IP协议族:是互联网通信…

Linux内核perf性能分析工具案例分析

一、系统级性能分析工具perf原理 1. perf 的基本概念 内核集成:perf 直接集成在 Linux 内核源码中,能够深度访问硬件和操作系统层面的性能数据,具有低开销、高精度的特点。 事件采样原理:通过定期采样系统事件&#xff0…

word-spacing 属性

介绍 CSS word-spacing 属性,用于指定段字之间的空间,例如: p {word-spacing:30px; }word-spacing属性增加或减少字与字之间的空白。 注意: 负值是允许的。 浏览器支持 表格中的数字表示支持该属性的第一个浏览器版本号。 属…

5种特效融合愚人节搞怪病毒

内容供学习使用,不得转卖,代码复制后请1小时内删除,此代码会危害计算机安全,谨慎操作 并在虚拟机里运行此代码!&#xff0c;病毒带来后果自负! #include <windows.h> #include <cmath> #include <thread> using namespace std; // 屏幕特效函数声明 void In…

深入理解 Windows 进程管理:taskkill 命令详解

引言 在 Windows 系统开发和日常使用中&#xff0c;我们经常会遇到程序卡死、文件被占用导致无法编译等问题。这时&#xff0c;taskkill 命令就成了解决问题的利器。本文将详细介绍 taskkill 的使用方法、常见场景以及注意事项&#xff0c;帮助你高效管理系统进程。 1. 什么是…