深度解析Nginx:高性能Web服务器的奥秘(下)

🐇明明跟你说过:个人主页

🏅个人专栏:《洞察之眼:ELK监控与可视化》🏅

🔖行路有良友,便是天堂🔖

目录

一、前言

1、Nginx概述 

二、Nginx核心功能

1、URL重写与重定向

2、反向代理

3、负载均衡

4、访问控制

5、SSL/TLS配置

三、Nginx模块讲解

1、HTTP模块

2、Stream模块

四、Nginx实际应用

1、Nginx在Web开发中的应用

2、Nginx在CDN中的应用 


一、前言

1、Nginx概述 

Nginx("engine x"的发音类似于"引擎 X")是一款高性能的开源Web服务器和反向代理服务器,由Igor Sysoev创建,并于2004年首次公开发布。它以其卓越的性能、高度的可靠性、简单的配置和低资源消耗而闻名。

以下是Nginx的概述:

  1. 高性能:Nginx以其高效的事件驱动架构而闻名,能够处理大量并发连接和高流量。它使用异步非阻塞I/O模型,有效地处理客户端请求,并且在高负载下表现优异。
  2. 反向代理:Nginx作为反向代理服务器时,可以接收客户端的请求并将其转发给后端服务器。它能够进行负载均衡、缓存静态内容、处理SSL终止等操作,提高了Web应用程序的性能和可靠性。
  3. 负载均衡:Nginx可以将请求分发给多个后端服务器,以实现负载均衡。通过配置不同的负载均衡算法,例如轮询、IP哈希、最少连接等,可以根据不同的需求实现请求的合理分发。
  4. 静态文件服务:Nginx非常擅长提供静态文件服务,能够高效地提供HTML、CSS、JavaScript、图像等静态内容,并且支持文件压缩和HTTP缓存等功能。
  5. 反向代理缓存:Nginx可以缓存后端服务器返回的响应,以减轻后端服务器的负载并提高响应速度。它支持不同类型的缓存,包括文件缓存、内存缓存和代理缓存等。
  6. HTTPS支持:Nginx支持SSL/TLS协议,能够进行HTTPS加密通信,并且支持SSL终止、SSL重定向、证书验证等功能,保障了Web应用程序的安全性。
  7. 简单配置:Nginx的配置文件采用简洁直观的语法,易于理解和维护。它支持模块化配置,可以通过加载不同的模块来扩展其功能,满足不同的需求。
  8. 高度可扩展:Nginx是一个模块化的Web服务器,可以通过加载不同的模块来扩展其功能,例如HTTP反向代理、负载均衡、缓存、安全性等。这使得Nginx可以根据不同的需求进行定制和扩展,适用于各种规模和类型的Web应用程序。

  

二、Nginx核心功能

1、URL重写与重定向

在 Nginx 中,URL 重写和重定向是常见的任务,用于处理客户端请求并将其发送到适当的位置。它们经常用于修改 URL 结构、处理旧 URL、执行 URL 路由等。

下面是 Nginx 中的 URL 重写和重定向的概念和用法:

URL 重写(URL Rewriting)

  • URL 重写是指修改客户端请求的 URL 路径,而不改变客户端看到的 URL。这个过程通常在 Nginx 的配置文件中通过 rewrite 指令来完成。URL 重写可以用于修改 URL 结构、处理错误的 URL 请求等。

例如,假设想要将所有 /old-url 的请求重写到 /new-url,可以使用如下配置:

location /old-url {rewrite ^/old-url/(.*)$ /new-url/$1 permanent;
}

  • 这个配置中的 rewrite 指令将匹配以 /old-url 开头的 URL,然后将其重写为以 /new-url 开头的 URL,并使用 permanent 关键字表示这是一个永久重定向。重定向后的 URL 将保留原始的查询参数。

 

URL 重定向(URL Redirection)

  • URL 重定向是指将客户端请求的 URL 重定向到另一个 URL 地址。这个过程会向客户端返回一个 HTTP 状态码(如 301 永久重定向或 302 临时重定向),告诉客户端要跳转到另一个 URL。
  • 在 Nginx 中,可以使用 return 指令或 rewrite 指令来实现 URL 重定向。

例如,要将所有访问根目录的请求重定向到一个新的域名,可以使用如下配置:
 

server {listen 80;server_name old-domain.com;location / {return 301 http://new-domain.com$request_uri;}
}

  • 这个配置中的 return 指令将所有访问 old-domain.com 根目录的请求重定向到 new-domain.com。

 

URL 重写用于修改 URL 路径,而 URL 重定向则用于将客户端请求重定向到另一个 URL 地址。这两个功能在 Nginx 中都有其独特的用途,可以根据需求选择合适的方法来处理请求。

2、反向代理

Nginx 反向代理是一种常见的用途,它允许 Nginx 接收来自客户端的请求,并将这些请求转发给后端的服务器或应用程序,然后将后端服务器的响应返回给客户端。这种方式可以隐藏后端服务器的实际 IP 地址和配置,并提供负载均衡、缓存、SSL 终端等功能。

下面是一个简单的 Nginx 反向代理配置示例:
 

server {listen 80;server_name your_domain.com;location / {proxy_pass http://backend_server;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}


在这个配置中:

  • listen 指令指定了 Nginx 监听的端口,这里是 80 端口,用于 HTTP 访问。
  • server_name 指令指定了你的域名。
  • location / 指令定义了处理客户端请求的位置。这里的配置表示当客户端访问网站时,Nginx 将会代理所有的请求。
  • proxy_pass 指令指定了后端服务器的地址,Nginx 会将客户端的请求转发给该地址。
  • proxy_set_header 指令用于设置 HTTP 请求头。在这个例子中,设置了 Host、X-Real-IP 和 X-Forwarded-For 头,用于传递客户端的真实 IP 地址和其他信息给后端服务器。

实际使用中,需要将 backend_server 替换为实际的后端服务器的地址,可以是 IP 地址或域名。此外,可能需要根据实际情况配置其他选项,例如 SSL 配置、缓存配置等。

通过这样的配置,Nginx 将充当反向代理,将客户端的请求转发给后端服务器,并将后端服务器的响应返回给客户端,从而实现了反向代理的功能。

3、负载均衡

Nginx 可以作为负载均衡器,用于将来自客户端的请求分发到多个后端服务器,以提高系统的性能、可用性和可扩展性。Nginx 提供了几种负载均衡算法,如轮询、IP Hash、最少连接等,可以根据需求选择适合的算法。

下面是一个简单的 Nginx 负载均衡配置示例:

http {upstream backend_servers {server 192.168.1.10;server 192.168.1.11;server 192.168.1.12;}server {listen 80;server_name your_domain.com;location / {proxy_pass http://backend_servers;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}


在这个配置中:

  • upstream 指令定义了后端服务器的集群,其中包含了多个服务器的地址和端口。这些服务器可以是真实的后端服务器,也可以是代理服务器或其他类型的服务器。
  • server 指令定义了每个后端服务器的地址和端口。
  • listen 指令和 server_name 指令定义了 Nginx 监听的端口和服务器名。
  • location / 指令定义了处理客户端请求的位置。这里的配置表示当客户端访问网站时,Nginx 将会代理所有的请求给 upstream 中定义的后端服务器集群。
  • proxy_pass 指令将客户端的请求转发给后端服务器集群。
  • proxy_set_header 指令用于设置 HTTP 请求头,以传递客户端的真实 IP 地址和其他信息给后端服务器。

通过这样的配置,Nginx 将会根据负载均衡算法(默认是轮询算法)将客户端的请求分发到多个后端服务器上,从而实现了负载均衡的功能。可以根据实际需求配置更多的后端服务器,并根据需要选择适合的负载均衡算法。

4、访问控制

Nginx 提供了多种方法来实现访问控制,包括基于 IP 地址、基于用户身份、基于 HTTP 请求头等。这些方法可以帮助你限制访问某些资源,保护你的网站免受恶意攻击和未经授权的访问。

下面是几种常见的 Nginx 访问控制方法:

基于 IP 地址的访问控制


使用 allow 和 deny 指令可以实现基于 IP 地址的访问控制。你可以在 Nginx 配置文件中设置允许或拒绝访问的 IP 地址列表。

例如,下面的配置将允许来自指定 IP 地址范围的访问,拒绝其他所有 IP 地址的访问:

location / {allow 192.168.1.0/24;deny all;
}


基于 HTTP 请求头的访问控制
可以使用 if 指令结合 HTTP 请求头来实现更细粒度的访问控制。

例如,下面的配置将拒绝所有没有 Referer 请求头或者 Referer 不是指定域名的请求:

location / {if ($http_referer !~* (your-domain.com)) {return 403;}
}


基于用户身份的访问控制
如果应用程序需要用户登录,可以结合应用程序的身份验证机制来实现访问控制。

例如,下面的配置要求用户登录后才能访问网站的特定部分:

location /private {auth_basic "Restricted";auth_basic_user_file /etc/nginx/.htpasswd;
}


在这个例子中,auth_basic 指令用于设置基本身份验证,auth_basic_user_file 指令指定了存储用户名和密码的文件路径。

5、SSL/TLS配置

配置 Nginx 的 SSL/TLS 是保护网站和用户数据安全的重要措施。SSL/TLS 配置包括证书的安装和使用,加密算法的选择,以及其他安全相关的设置。

以下是一个基本的 Nginx SSL/TLS 配置示例:

server {listen 443 ssl;server_name your_domain.com;ssl_certificate /path/to/your/certificate.crt;ssl_certificate_key /path/to/your/private.key;# 安全参数配置ssl_protocols TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers on;ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;ssl_session_tickets off;ssl_stapling on;ssl_stapling_verify on;# 可选的安全性增强配置add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;add_header X-Frame-Options "SAMEORIGIN";add_header X-Content-Type-Options "nosniff";# 配置 SSL 会话的结束方式ssl_session_tickets off;location / {# 其他配置...}
}


在这个配置中:

  • listen 443 ssl; 指令表示该服务器块监听 443 端口,并启用 SSL/TLS 加密。
  • server_name 指令指定了你的域名。
  • ssl_certificate ssl_certificate_key 指令指定了 SSL 证书和私钥的路径,这两个文件是 SSL/TLS 加密的必要组件。
  • ssl_protocols 指令用于指定允许使用的 SSL/TLS 协议版本。
  • ssl_prefer_server_ciphers on; 指令表示优先使用服务器端定义的加密套件。
  • ssl_ciphers 指令定义了可用的加密算法套件。
  • ssl_session_cache 指令设置 SSL 会话缓存的大小和存储位置。
  • ssl_session_timeout 指令设置 SSL 会话的超时时间。
  • ssl_session_tickets 指令控制 SSL 会话票据的使用。
  • ssl_stapling ssl_stapling_verify 指令启用 OCSP Stapling 和 OCSP Stapling 验证。
  • add_header 指令用于添加额外的安全头,如 Strict-Transport-Security、X-Frame-Options 和 X-Content-Type-Options。

以上是一个基本的 SSL/TLS 配置示例,可以根据实际需求对其进行调整和扩展,以满足网站安全性和性能需求。

 

三、Nginx模块讲解

1、HTTP模块

Nginx 的 HTTP 模块是 Nginx 的核心模块之一,它处理 HTTP 请求和响应,并提供了丰富的功能和配置选项,包括反向代理、负载均衡、缓存、访问控制等。

以下是一些常用的 Nginx HTTP 模块及其功能:

  1. Core Module(核心模块):提供了基本的 HTTP 服务器功能,包括定义服务器块、监听端口、设置服务器名称等。例如,listen、server_name 等指令都属于核心模块。
  2. Access Module(访问模块):用于控制客户端对服务器的访问权限。包括 allow 和 deny 指令,可以根据客户端的 IP 地址或其他条件来允许或拒绝访问。
  3. Rewrite Module(重写模块):用于重写或修改 URL。提供了 rewrite 指令,可以根据匹配规则修改客户端请求的 URL。
  4. Proxy Module(代理模块):提供了反向代理功能,允许将客户端的请求转发给后端的服务器或应用程序。包括 proxy_pass、proxy_set_header 等指令。
  5. Load Balancing Module(负载均衡模块):用于将客户端的请求分发到多个后端服务器,以提高系统的性能和可用性。包括 upstream 和 server 指令。
  6. SSL Module(SSL 模块):提供了 SSL/TLS 加密功能,用于保护网站和用户数据的安全。包括 ssl_certificate、ssl_certificate_key 等指令。
  7. Headers Module(头部模块):用于添加、修改或删除 HTTP 请求和响应头。包括 add_header、more_set_headers 等指令。
  8. Gzip Module(压缩模块):用于压缩 HTTP 响应体,减小传输数据的大小,提高网站的加载速度。包括 gzip、gzip_types 等指令。
  9. Cache Module(缓存模块):用于缓存静态和动态内容,减轻后端服务器的负载,并提高响应速度。包括 proxy_cache、proxy_cache_key 等指令。

 

以上是一些常见的 Nginx HTTP 模块及其功能,可以根据需求在 Nginx 配置文件中使用这些模块和指令来实现各种功能。 Nginx 的模块化设计使得它可以灵活地适应不同的应用场景和需求。

2、Stream模块

Nginx 的 Stream 模块是 Nginx 的一个核心模块之一,用于处理 TCP 和 UDP 流量。与 HTTP 模块不同,Stream 模块不处理 HTTP 请求和响应,而是处理基于传输层协议的数据流,例如 TCP 连接、UDP 包等。Stream 模块通常用于实现反向代理、负载均衡、TCP/UDP 代理等网络层级别的功能。

以下是一些常见的 Nginx Stream 模块及其功能:

  1. Core Module(核心模块):提供了基本的 Stream 服务器功能,包括定义服务器块、监听端口等。与 HTTP 模块的核心模块类似。
  2. Proxy Module(代理模块):提供了 TCP 和 UDP 的反向代理功能,允许将客户端的 TCP/UDP 流量转发给后端的服务器或应用程序。包括 proxy_pass、proxy_set_header 等指令。
  3. Load Balancing Module(负载均衡模块):用于将客户端的 TCP/UDP 流量分发到多个后端服务器,以提高系统的性能和可用性。包括 upstream 和 server 指令。
  4. SSL Module(SSL 模块):提供了 TCP 的 SSL/TLS 加密功能,用于保护 TCP 连接的安全。包括 ssl_certificate、ssl_certificate_key 等指令。
  5. UDP Module(UDP 模块):用于处理 UDP 流量,可以实现 UDP 的反向代理、负载均衡等功能。Nginx 1.19.0 版本引入了对 UDP 的支持。

 

Stream 模块的使用方式与 HTTP 模块类似,你可以在 Nginx 配置文件中定义 Stream 服务器块,并在其中使用相应的指令来配置 TCP 或 UDP 的代理、负载均衡等功能。通过 Stream 模块,Nginx 可以成为一个功能强大的 TCP/UDP 代理服务器,可以处理各种类型的网络流量,并提供高性能和可靠性。

四、Nginx实际应用

1、Nginx在Web开发中的应用

Nginx 在 Web 开发中有许多应用,它是一个高性能的 Web 服务器和反向代理服务器,提供了许多功能和特性,适用于各种不同的 Web 开发场景。

以下是一些 Nginx 在 Web 开发中常见的应用:

  1. 静态文件服务: Nginx 可以作为一个高性能的静态文件服务器,用于提供网站的静态资源,如 HTML、CSS、JavaScript、图片等。它可以快速地响应静态文件的请求,并有效地缓存静态内容,提高网站的访问速度和性能。
  2. 反向代理: Nginx 可以作为反向代理服务器,将客户端的请求转发给后端的服务器或应用程序,并将后端服务器的响应返回给客户端。这种方式可以隐藏后端服务器的实际 IP 地址和配置,并提供负载均衡、高可用性、安全性等功能。
  3. 负载均衡: Nginx 可以作为负载均衡器,将客户端的请求分发到多个后端服务器上,以提高系统的性能和可用性。它支持多种负载均衡算法,如轮询、IP Hash、最少连接等,并可以根据服务器的健康状态进行动态调整。
  4. 缓存服务: Nginx 可以作为缓存服务器,缓存静态和动态内容,减轻后端服务器的负载,并提高响应速度。它支持内存缓存和磁盘缓存,并可以根据需要配置缓存规则和过期时间。
  5. SSL/TLS 终端: Nginx 支持 SSL/TLS 加密,可以用于安全地传输数据和保护用户隐私。它可以用作 SSL/TLS 终端,对客户端进行 SSL 握手,并在后端服务器之间使用非加密的 HTTP 或 HTTPS 连接。
  6. 反向 WebSocket 代理: Nginx 可以代理 WebSocket 请求,用于实现实时通信和双向数据传输。它支持 WebSocket 协议的代理和负载均衡,可以处理大量的并发连接。
  7. HTTP/2 支持: Nginx 支持 HTTP/2 协议,可以提供更快的网页加载速度和更低的延迟。它可以与现代的 Web 浏览器和服务器一起使用,以实现最新的 Web 性能优化。

2、Nginx在CDN中的应用 

在 CDN(内容分发网络)中,Nginx 是一个非常常见和重要的组件,它提供了多种功能和特性,用于优化内容分发、提高网站性能、加强安全性等。

以下是 Nginx 在 CDN 中的一些常见应用:

  1. 内容缓存: Nginx 可以作为 CDN 的缓存服务器,缓存静态和动态内容,如 HTML、CSS、JavaScript、图片、视频等。通过缓存静态内容,Nginx 可以减轻后端服务器的负载,并提高内容的访问速度和性能。
  2. 反向代理: Nginx 可以作为 CDN 的反向代理服务器,将客户端的请求转发给最近的缓存服务器或源服务器,并将响应返回给客户端。这种方式可以加速内容传输,提高网站的可用性和可靠性。
  3. 负载均衡: CDN 通常包含多个缓存节点,Nginx 可以作为负载均衡器,将客户端的请求分发到多个缓存节点上,以提高系统的性能和可用性。它支持多种负载均衡算法,如轮询、IP Hash、最少连接等,并可以根据节点的健康状态进行动态调整。
  4. SSL/TLS 终端: Nginx 支持 SSL/TLS 加密,可以用于安全地传输内容和保护用户隐私。在 CDN 中,Nginx 可以作为 SSL/TLS 终端,对客户端进行 SSL 握手,并在缓存节点之间使用非加密的 HTTP 或 HTTPS 连接。
  5. 内容压缩: Nginx 支持内容压缩,可以减小传输数据的大小,提高内容的传输速度和节省带宽。在 CDN 中,Nginx 可以压缩静态和动态内容,并提供 Gzip 压缩、Brotli 压缩等功能。
  6. 安全防护: Nginx 提供了丰富的安全特性,如访问控制、反向代理防护、DDoS 防护等。在 CDN 中,Nginx 可以用于防止恶意攻击、保护网站安全,并提供安全日志和监控功能。

 

💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Nginx的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!! 

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

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

相关文章

git-将本地项目上传到远程仓库

在gitee中新建一个远程仓库。 填写对应内容。 打开你想上传的文件夹,比如我想上传yuanshen 右击,打开git bash 输入git init初始化仓库 git init 添加项目所有文件 git add . 将添加的文件提交到本地仓库(提交说明必填) git …

嵌入式CAN通信协议详解分析

CAN协议简介 CAN是控制器局域网络(Controller Area Network)的简称,它是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准(ISO11519),是国际上应用最广泛的现场总线之一。 CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线…

算法课程笔记——自下而上树形DP

算法课程笔记——自下而上树形DP #include<bits/stdc.h>usingnamespacestd; constintN100005; intn,a[N]; longlongdp[N][2]; vector<int> e[N]; voiddfs(intu){for(autov:e[u]){dfs(v);dp[u][1]dp[v][0];dp[u][0]max(dp[v][0],dp[v][1]);}dp[u][1]a[u]; } intmain…

图像分类——猫狗图片

引言 亲爱的读者们&#xff0c;您是否在寻找某个特定的数据集&#xff0c;用于研究或项目实践&#xff1f;欢迎您在评论区留言&#xff0c;或者通过公众号私信告诉我&#xff0c;您想要的数据集的类型主题。小编会竭尽全力为您寻找&#xff0c;并在找到后第一时间与您分享。 …

如何用Rust获取CPU、内存、硬盘的信息?

目录 一、用Rust获取CPU、内存、硬盘的信息 二、知识点 systemstat 一、用Rust获取CPU、内存、硬盘的信息 首先&#xff0c;需要添加systemstat库到Cargo.toml文件&#xff1a; [dependencies] systemstat "0.8.2" 在Rust代码中使用它&#xff1a; extern crat…

新增柱线组合图、象限图,新增钉钉、飞书、企业微信客户端免密登录,DataEase开源数据可视化分析工具v2.6.0发布

2024年5月13日&#xff0c;人人可用的开源数据可视化分析工具DataEase正式发布v2.6.0版本。 这一版本的功能升级包括&#xff1a;图表方面&#xff0c;新增了柱线组合图、象限图&#xff1b;仪表板方面&#xff0c;支持批量拖拽字段&#xff0c;外部参数新增支持配置过滤组件&…

日元崩了:日本上市公司转战比特币作对冲

5月13日&#xff0c;日本上市公司Metaplanet发布公告宣布因为政府债务水平高企、实际利率长期处于负值以及日元贬值&#xff0c;Metaplanet特将比特币作为其公司战略储备资产&#xff0c;以回应日本严峻的经济形势。同时也为当地资产管理领域的企业创新开创了先例。 Metaplanet…

强化学习——马尔可夫奖励过程的理解

目录 一、马尔可夫奖励过程1.回报2.价值函数 参考文献 一、马尔可夫奖励过程 在马尔可夫过程的基础上加入奖励函数 r r r 和折扣因子 γ \gamma γ&#xff0c;就可以得到马尔可夫奖励过程&#xff08;Markov reward process&#xff09;。一个马尔可夫奖励过程由 < S , …

Vue从入门到实战Day05

一、自定义指令 自定义指令&#xff1a;自己定义的指令&#xff0c;可以封装一些dom操作&#xff0c;扩展额外功能 需求&#xff1a;当页面加载时&#xff0c;让元素将获得焦点 (autofocus在safari浏览器有兼容性) 操作dom&#xff1a;dom元素.focus() mounted() {this.$ref…

Elasticsearch解决字段膨胀问题

文章目录 背景Flattened类型的产生Flattened类型的定义基于Flattened类型插入数据更新Flattened字段并添加数据Flattened类型检索 Flattened类型的不足 背景 Elasticsearch映射如果不进行特殊设置&#xff0c;则默认为dynamic:true。dynamic:true实际上支持不加约束地动态添加…

关于milvus go sdk运行时报9223372036854775807 (untvped int constant)overflows int问题

背景 在使用milvus go sdk去查询milvus服务中并列出所有集合的时候遇到一个int溢出问题&#xff0c;依据官方文档&#xff0c;具体代码如下 package localimport ("context""fmt""github.com/milvus-io/milvus-sdk-go/v2/client""log&quo…

vue3使用依赖注入实现跨组件传值

父组件Index.vue: <script setup> import { onMounted, provide, ref } from vue import Child from ./Child.vue import ./index.cssconst count ref(0)provide(count, count)const handleClick () > {count.value }onMounted(() > {}) </script><tem…

记录:robot_localization传感器数据融合学习

一、参考资料 官方&#xff1a; http://wiki.ros.org/robot_localizationhttp://docs.ros.org/en/noetic/api/robot_localization/html/index.html2015 ROSCon 演讲官方网址&#xff08;youyube上也有这个视频&#xff09; 实践教程 https://kapernikov.com/the-ros-robot_…

纯福利|手把手教你如何白嫖免费的GPU资源(二)

大家好&#xff0c;我是无界生长。 前段时间写过一篇文章《纯福利&#xff5c;手把手教你如何白嫖免费的GPU资源&#xff08;一&#xff09;》&#xff0c;使用Google Colab提供的免费的GPU资源&#xff0c;今天接着写白嫖GPU资源攻略&#xff0c;可获得“长期免费的CPU实例资源…

【opencv】信用卡号识别实验

实验环境&#xff1a;anaconda、jupyter notebook&#xff08;其它的ide也行&#xff09; 实验用的包&#xff1a;numpy、matplotlib、opencv 实验目标&#xff1a; 识别信用卡的卡号 信用卡图片&#xff1a; 数字模板图片&#xff1a; 一、包引入 import cv2 import matplo…

kubernetes集群svc的代理模式-iptables修改为ipvs

一、概述\ 我们都知道&#xff0c;k8s集群的外部网络分发&#xff0c;借助kube-proxy组件来完成&#xff1b; 问题&#xff1a;我们为什么要将代理模式修改为ipvs而不继续使用iptables呐&#xff1f; 1&#xff0c;iptables底层使用四表五链完成网络代理&#xff0c;效率比较低…

RiProV2主题美化【支付页弹窗增加价格提示语】Ritheme主题美化RiProV2-网站WordPress美化二开

背景: 楼主的网站是用WordPress搭建的,并使用了正版主题RiProV2,但RiProV2在支付弹窗页没有价格,只在文章详情页会展示价格。本文就是美化这个支付弹窗,在支付弹窗页把价格字段加上,如下图所示: 美化前: 美化后 美化步骤: (1)定位到文件:/www/wwwroot/www.uu2i…

基于SpringBoot设计模式之创建型设计模式·抽象工厂模式

文章目录 介绍开始架构图&#xff08;以穿搭举例&#xff09;样例一&#xff08;html关于列表和表格的应用&#xff09;定义抽象工厂&#xff08;html&#xff09;定义抽象工厂需要制作抽象产物&#xff08;托盘&#xff09;定义具体工厂&#xff08;列表、表格&#xff09;定义…

海洋环境保护论文阅读记录

海洋环境保护 论文1&#xff1a;Critical role of wave–seabed interactions in the extensive erosion of Yellow River estuarine sediments 波浪-海床相互作用在黄河河口广泛侵中的关键作用 estuatine 河口的&#xff0c;港湾的 erodibility侵蚀度 sediment erodibility …