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

Ngin入门套餐

快速了解Nginx

  • 一、代理
    • 1.1 正向代理
    • 1.2 反向代理
    • 1.3 正向代理和反向代理的区别
  • 二、Nginx负载均衡策略
    • 2.1 轮询(Round Robin)
    • 2.2 加权轮询(Weighted Round Robin)
    • 2.3 IP 哈希(IP Hash)
    • 2.4 最少连接(Least Connections)
    • 2.5 随机(Random)
  • 三、动静分离
  • 四、配置文件解析

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的。

特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。

Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。

Nginx代码完全用C语言从头写成。官方数据测试表明能够支持高达 50,000 个并发连接数的响应。

一、代理

1.1 正向代理

正向代理是一种网络代理模式,代理服务器位于客户端和目标服务器之间。它的主要功能是接受客户端请求,并将这些请求转发到目标服务器,然后将响应返回给客户端。正向代理通常用于实现访问控制、隐私保护、缓存等功能。
在这里插入图片描述
工作原理:

  1. 客户端请求:客户端(例如浏览器)向正向代理服务器发送请求,而不是直接请求目标服务器。
  2. 代理处理请求:正向代理接收到请求后,会将其转发到目标服务器。这时,目标服务器并不知道是哪个客户端在请求。
  3. 目标服务器响应:目标服务器将响应发送回正向代理服务器。
  4. 代理服务器返回响应:正向代理接收到从目标服务器返回的响应,并将其转发给客户端。

应用场景:

  1. 访问控制,通过设置代理服务器规则实现外来请求是否能够访问目标服务器。
  2. 匿名访问,代理服务器作为访问中介,双方都只知道代理服务器的 ip 信息。
  3. 加速访问,代理服务器能够缓存常见请求的响应,减少通信延迟,提高访问速度。
  4. 跨地域访问,有些内容会因为地域限制而无法访问,用户可以通过正向代理伪装成其他地区的用户来访问被限制的内容。

1.2 反向代理

反向代理是一种服务器配置,它可以接收客户端的请求,并将这些请求转发到后端的一个或多个服务器上。反向代理通常用于负载均衡、安全性、缓存等目的。
在这里插入图片描述
工作原理:

  1. 客户端请求:客户端(如用户的浏览器)发送一个HTTP请求,请求的数据可能是网页、图像或其他资源。
  2. 到达反向代理服务器:请求首先到达反向代理服务器,而不是直接到达后端应用服务器。
  3. 请求转发:反向代理服务器根据配置的规则,决定将请求转发到哪一台后端服务器。这些规则可以基于URL路径、负载均衡策略等。
  4. 后端处理:被选中的后端服务器接收到请求并进行处理。这可能涉及查询数据库、计算、调用其他服务等。
  5. 返回响应:后端服务器完成请求处理后,将相应的数据(如HTML页面、JSON 数据、文件等)返回给反向代理服务器。
  6. 响应转发给客户端:反向代理服务器接收到后端服务器的响应后,可能会对其进行缓存、修改或记录日志,然后再将响应发送回客户端。
  7. 客户端接收响应:客户端最终收到来自反向代理服务器的响应,呈现给用户。

应用场景:

  1. 负载均衡,反向代理可以将客户端请求分发到多个后端服务器,从而实现负载均衡。这种方法可以提高系统的可用性和性能,确保没有单一服务器过载。
  2. SSL/TLS终止,反向代理可以处理HTTPS请求,为后端服务器减轻了SSL/TLS加密和解密的负担。通过集中管理证书,使得更新和维护变得更加简单。
  3. 安全防护,使用反向代理可以隐藏后端服务器的真实地址,提供额外的安全层。它可以过滤恶意请求、进行身份验证或防止DDoS攻击等。
  4. 跨跨域资源共享(CORS),在某些情况下,反向代理可以用于解决跨域请求的问题。通过设置适当的HTTP头,允许特定源访问后端资源。
  5. 微服务架构,在微服务架构中,反向代理可以帮助路由请求到不同的服务。它也可以充当API网关,统一管理所有的API请求。

1.3 正向代理和反向代理的区别

正向代理是客户端互联网之间的中介。客户端通过正向代理访问其他网站或服务,而不是直接访问目标服务器。

客户端在访问互联网时,使用正向代理服务器作为请求的发起端,这样目标服务器就无法识别到客户端的真实IP信息,对客户端的身份起到一定的保护作用。


反向代理是位于客户端一组后端服务器之间的中间层。客户端向反向代理发送请求,而反向代理将请求转发给适当的后端服务器。

客户端在访问后端服务器时,访问的并不是真实的后端服务器地址,而是反向代理服务器,所有的服务访问都通过反向代理服务进行范围,由其进行转发。这样后端服务器架构就能够被很好的保护起来。

反向代理和正向代理的主要区别在于它们的工作方向及其角色定位,而不是仅仅依赖于请求的发起者(客户端或后端服务器)。

正向代理代理的是客户端,反向代理代理的是服务器端。

二、Nginx负载均衡策略

为了让资源更多的服务器接收到更多的访问请求,让每台服务器能够利用好自身的资源。 Nginx 提供了多种负载均衡策略,可以根据不同的需求和场景选择合适的策略。

2.1 轮询(Round Robin)

这是 Nginx 的默认负载均衡方法。请求按照顺序分配给后端服务器,即第一个请求发送给第一台服务器,第二个请求发送给第二台,以此类推。如果有多个请求并发到达,则会循环遍历后端服务器。
在这里插入图片描述

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

适用于无状态的访问请求,即没有保留相关数据在目标服务器上的访问请求,如果请求存在状态保存在目标服务器,那么下次访问时可能相应的不是上次的服务器,导致状态丢失。

2.2 加权轮询(Weighted Round Robin)

与简单的轮询类似,指定轮询几率,weight和访问比率成正比,但每台后端服务器可以被分配不同的权重。权重越高,被分配到请求的概率就越大。这对于性能差异较大的服务器特别有效。
在这里插入图片描述

upstream backend {server backend1.example.com weight=3 down;  # 权重为3server backend2.example.com weight=2 backup;  # 权重为2server backend3.example.com weight=1;  # 权重为1
}

down:表示当前的server暂时不参与负载
weight:默认为1.weight越大,负载的权重就越大。
backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。

2.3 IP 哈希(IP Hash)

这种方法使用客户端的 IP 地址计算哈希值,将请求总是分配给同一台后端服务器。这样可以保证相同用户的请求始终落在同一服务器上,可以解决session不共享的问题,适合需要会话保持的场景(如购物车应用)。
在这里插入图片描述

IPHash的轮询方式确实能解决Session问题,但是考虑到服务器可能存在宕掉的风险导致数据丢失,因此一般采用Redis对Session进行共享。

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

2.4 最少连接(Least Connections)

策略将请求路由到当前连接数最少的后端服务器。这对于处理长连接或高延迟请求非常有效,因为它可以确保负载在所有服务器之间尽可能均匀分配。

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

2.5 随机(Random)

这个策略随机选择一台后端服务器来处理请求。这种方式可以在负载相对均衡的情况下减轻某些特定服务器的压力。

upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;# 配置随机负载均衡# 注意:Nginx 默认没有提供随机算法,需要使用第三方模块
}

三、动静分离

动静分离,在我们的软件开发中,有些请求是需要后台处理的,有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件。

让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作。提高资源响应的速度。

静态内容:如 HTML 文件、CSS 文件、JavaScript 文件、图片等,这些资源不需要服务器端处理,可以直接由 Nginx 提供。
动态内容:如 PHP、Python、Node.js 等,通过后端应用程序生成的内容,这些内容通常需要 web 应用服务器进行处理。

在这里插入图片描述
文件配置:

server {# 静态文件配置当URL为/时,提供静态文件/var/www/html/index.html供访问location / {root /var/www/html;  # 指向静态文件目录index index.html index.htm;try_files $uri $uri/ =404;  # 如果文件不存在,返回 404}# 针对特定目录的静态文件处理当访问URL为/static/XX时,根据下边配置的静态资源文件夹中的文件提供访问location /static/ {alias /var/www/static/;  # 指向静态资源文件夹}# 动态内容处理(例如 PHP)location ~ \.php$ { #此处是可以使用正则表达式的include snippets/fastcgi-php.conf;  # 引入 FastCGI 配置fastcgi_pass unix:/run/php/php7.4-fpm.sock;  # PHP-FPM 的 socket 地址fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;  # 包含 FastCGI 参数}
}

静态内容处理:
/ 路径下的请求会被直接处理为静态文件。如果请求的文件存在,则返回该文件;否则返回 404 错误。
/static/ 路径用于处理静态文件,使用 alias 指令将 URI 映射到实际文件系统的位置。

动态内容处理:
使用正则表达式匹配以 .php 结尾的请求,并通过 fastcgi_pass 将请求转发给 PHP-FPM(FastCGI Process Manager),以便处理 PHP 文件。
对于其他动态请求(如 API 请求),我们通过 proxy_pass 将请求代理到 Node.js 应用程序或其他后端服务。

具体可以看下边的配置文件解析哈

四、配置文件解析

#全局配置
user  www-data; #指定运行 Nginx 工作进程的用户和组,通常选择一个权限较低的用户(如 www-data)以增强安全性。
worker_processes  auto; #设置工作进程的数量。使用 auto 可以根据系统的 CPU 核心数自动调整,通常建议设置为 CPU 核心数,以提高性能。#错误日志配置 # 
error_log  /var/log/nginx/error.log warn; #配置错误日志的路径及其日志级别,级别包括 debug, info, notice, warn, error, crit, alert, emerg
pid        /var/run/nginx.pid; #指定存放 Nginx 主进程 PID(进程标识符)的文件路径。#处理事件配置
events {worker_connections  1024;  #表示每个工作进程能够同时处理的最大连接数
}#定义上游服务器,用于负载均衡
upstream backend { #此处的backend名称可用于下边的server调用# 定义后端服务器server backend1.example.com;  # 服务器 1server backend2.example.com;  # 服务器 2server 192.168.1.100:8080;    # 服务器 3(IP 地址)# 可以指定权重,数字越大表示优先级越高server backend3.example.com weight=3;  # 权重为 3
}#网络请求配置
http {include       mime.types;  	t-Type。default_type  application/octet-stream; #未明确指定类型时使用的默认 MIME 类型。#访问日志的格式log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main; #设置访问日志的存放路径和使用的日志格式。此处使用前面定义的 main 格式。sendfile        on;  # 启用高效的文件传输方式,将文件从磁盘直接发送到网络,而无需经过用户空间,减少 CPU 占用率,提高性能。tcp_nopush     on;  # 在发送大文件时,尽可能将数据一起发送,减少 TCP 分段,提高效率。tcp_nodelay    on;  # 禁用 Nagle 算法,以便尽快发送小的数据包,适用于交互型应用。keepalive_timeout  65;  #  设置 HTTP Keep-Alive 连接的超时时间,单位为秒。即在这段时间内,如果没有新的请求,则连接会被关闭。#GZip压缩设置gzip  on; #开启 Gzip 压缩功能,可以减小传输的数据量,提高加载速度。gzip_types text/plain application/json application/javascript text/css application/xml text/xml application/xhtml+xml; #指定哪些 MIME 类型的响应内容应进行 Gzip 压缩。gzip_min_length  1000; #指定 Gzip 压缩的最小响应体长度,只有当响应体长度超过该值时,才会进行压缩。#服务器访问设置server {listen       80;  #指定Nginx监听的 IP 地址和端口号,80 表示监听 HTTP 请求。server_name  localhost;  #定义服务器的名称,通常是域名或 IP 地址。当多个虚拟主机存在时,用于匹配请求的主机名。#用于定义如何处理特定 URI 的请求,可以根据请求的 URI 路径进行不同的处理。location / {root   /var/www/html;  #定义文档根目录,Nginx 将从该目录提供静态文件。index  index.html index.htm;  #定义默认的索引文件,例如 index.html 或 index.htm,当请求目录时会返回这些文件(/var/www/html/index.html)。try_files $uri $uri/ =404; #如果文件不存在,返回 404}#提供静态文件配置location /static/ {alias /var/www/static/;  #将 URI 映射到实际文件系统的位置。}error_page  404  /404.html; #定义特定错误代码(如 404)的定制错误页面,可用于改善用户体验。#当访问URL等于/404.html时,internal用于标记该位置块为内部重定向使用。location = /404.html {internal; #它不能直接通过 HTTP 请求访问。例如,如果用户在浏览器中直接访问 /404.html,Nginx 将返回 404 错误,而不是显示该页面。}#指定以 /api/ 开头的请求的处理方式,这里使用了反向代理。location /api/ { #当URL为 Nginx服务器:80/api 时触发反向代理proxy_pass http://127.0.0.1:3000;  #将请求转发到指定的后端服务器,通常用于将负载分发到应用程序服务器。proxy_set_header Host $host; #设置代理请求中的 HTTP 头部信息,用于传递原始请求的信息,例如请求头部的 Host 和用户的真实 IP 地址。proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}#指定以 /server/ 开头的请求的处理方式。location /server/ { #当URL为 Nginx服务器:80/server 时触发负载均衡proxy_pass http://backend;  # 将请求转发到定义的 upstream, 即按照预定的规则(轮询,权重,随机等)转发到定义的集群中的对应节点proxy_set_header Host $host;  # 传递主机头信息proxy_set_header X-Real-IP $remote_addr;  # 传递真实用户 IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 传递 X-Forwarded-For 头}}
}

相关文章:

Ngin入门套餐

快速了解Nginx 一、代理1.1 正向代理1.2 反向代理1.3 正向代理和反向代理的区别 二、Nginx负载均衡策略2.1 轮询(Round Robin)2.2 加权轮询(Weighted Round Robin)2.3 IP 哈希(IP Hash)2.4 最少连接&#x…...

使用linux编译main.cpp文件

1、首先创建一个简单的test.cpp,使用终端命令形式: touch test.cpp 创建结束,记得ls一下,如下: 2、找到创建结束的test.cpp文件,然后右键编辑,输入一个简单的代码,如下 #include …...

服务器部署‌Traefik 实现子级域名路由服务(对外子域名80,路由对内大端口)

文章目录 1.‌Traefik安装2.启动nginx配置路由 本文档只是为了留档方便以后工作运维,或者给同事分享文档内容比较简陋命令也不是特别全,不适合小白观看,如有不懂可以私信,上班期间都是在得 前言,领导让我调研在线发布得…...

@RequestParam @PathVirable @RequestBody @ApiParam的区别

RequestParam 最常用用value指定参数名字,required字段指定参数是否必须,默认为true,当requiredfalse时,一般配合着defaultValue"xx"使用对应的url是这样的: https://localhost/requestParam/test?key1va…...

Vulnhub靶场案例渗透[5]- DC4

文章目录 1. 靶场搭建2. 信息收集2.1 确定靶机ip2.2 主机信息收集2.3 主机目录探测 3. 渗透过程3.1 sql注入检测3.2 burp爆破3.3 反弹shell3.4 提权 4. 总结 1. 靶场搭建 靶场源地址 检验下载文件的检验码,对比没问题使用vmware打开 # windwos 命令 Get-FileHash …...

http协议概述与状态码

目录 1.HTTP概述 1.1请求报文起始行与开头 ​1.2响应报文起始行 ​ 1.3响应报文开头 ​ 2.http状态协议码 1.HTTP概述 默认端口 80 HTTP超文本传输与协议: 数据请求和响应 传输:将网站的数据传递给用户 超文本:图片 视频等 请求request:打开网站 访问网站 响应r…...

Golang 进阶5—— 反射

Golang 进阶5—— 反射 注意,该文档只适合有编程基础的同学,这里的go教程只给出有区别的知识点 反射: 反射可以在运行时动态获取变量的各种信息, 比如变量的类型、 类别等信息。如果是结构体变量,还可以获取结构体本…...

react 封装防抖

封装防抖 import React, { useRef, useEffect, useCallback } from react;function useDebounce(fn, delay) {const delayRef useRef(delay);const fnRef useRef(fn);// 更新ref值useEffect(() > {delayRef.current delay;}, [delay]);useEffect(() > {fnRef.current…...

Java项目-----图形验证码登陆实现

原理: 验证码在前端显示,但是是在后端生成, 将生成的验证码存入redis,待登录时,前端提交验证码,与后端生成的验证码比较. 详细解释: 图形验证码的原理(如下图代码).前端发起获取验证码的请求后, 1 后端接收请求,生成一个键key(随机的键) 然后生成一个验证码作为map的valu…...

【网络代理模块】反向代理(上)

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求,然后将请求转发给内部网络上的服务器,将从服务器上得到的结果返回给客户端,此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说,反向代理就相当…...

2-112基于matlab的协同干扰功率分配模型

基于matlab的协同干扰功率分配模型,带操作界面的功率分配GUI,可以实现对已有功率的分配优化,可以手动输入参数值。4个干扰山区分二批总干扰功率,每个扇区包括威胁总系数、综合压制概率、目标函数增量等。程序已调通,可…...

数据结构之——二叉树

一、二叉树的基本概念 二叉树是数据结构中的重要概念,每个节点最多有两个子树,分别为左子树和右子树。这种结构具有明确的层次性和特定的性质。 二叉树有五种基本形态: 空二叉树:没有任何节点。只有一个根结点的二叉树&#xff…...

多层感知机(MLP)实现考勤预测二分类任务(sklearn)

1、基础应用: https://blog.csdn.net/qq_36158230/article/details/118670801 多层感知机(MLP)实现考勤预测二分类任务(sklearn) 2、分类器参数:https://scikit-learn.org/dev/modules/generated/sklearn.neural_network.MLPClassifier.html 3、损失函数…...

文件与目录的基本操作

前提:使用su root 切换到权限最大的root用户 1.显示当前工作目录的绝对路径(pwd) 用途:用于显示当前工作目录的绝对路径的命令。无论用户在文件系统的哪个位置,pwd 命令都能提供当前所在位置的完整路径信息。 用法&a…...

Python入门笔记(三)

文章目录 第八章 字典dict8.1 创建字典:{}、dict()、字典生成式、zip()8.2 获取键对应的值:get()8.3 in, not in判断键是否在字典中8.4 增加键值对:fromkeys()、setdefault()、update()8.5 删除键值对:del语句、clear(…...

PostgreSQL 任意命令执行漏洞(CVE-2019-9193)

记一次授权攻击通过PostgreSql弱口令拿到服务器权限的事件。 使用靶机复现攻击过程。 过程 在信息收集过程中,获取到在公网服务器上开启了5432端口,尝试进行暴破,获取到数据库名为默认postgres,密码为1 随后连接进PostgreSql …...

使用tgz包下载安装clickhouse低版本

1.下载安装包 官方下载地址:https://packages.clickhouse.com/tgz/stable 阿里云下载地址:clickhouse-tgz-stable安装包下载_开源镜像站-阿里云 共需要下载四个文件 clickhouse-common-static-20.3.10.75.tgz clickhouse-common-static-dbg-20.3.10.7…...

外包功能测试干了6个月,技术退步太明显了。。。。。

先说一下自己的情况,本科生,23年通过校招进入武汉某软件公司,干了差不多6个月的功能测试,今年中秋,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我就在一个外包企业干了6个月的功…...

动态规划和贪心算法

目录 动态规划和贪心算法 动态规划 贪心算法 两者之间的区别 动态规划和贪心算法 是两种经典的算法设计策略,它们各自具有独特的特点和适用场景。 动态规划 动态规划是一种将复杂问题分解为更简单子问题的求解方法。它特别适用于那些具有重叠子问题和最优子结构特性的问…...

python爬虫--tx动漫完整信息抓取

python爬虫--tx动漫完整信息抓取 一、采集主页信息二、采集详情页信息三、完整代码一、采集主页信息 先看一下采集到的信息,结果保存为csv文件: 打开开发者工具,找到数据接口。 使用xpath提取详情页url。 二、采集详情页信息 如上图所示,使用xpath提取详情页的标题、作…...

《使用Java做爬虫和使用python做爬虫哪个好》

使用Java做爬虫和使用python做爬虫哪个好 Java 和 Python 都是非常出色的编程语言,在爬虫领域各有其优势,具体使用哪种语言更好取决于多种因素: 一、开发效率 1. Python Python 以其简洁、易读的语法而闻名。在爬虫开发中,有许…...

如果我想开发一个APP,需要准备哪些材料呢

开发一个APP需要准备的材料相对复杂,涵盖了公司资质、技术资源、支付接口以及第三方服务等多个方面。以下是一份详细的材料清单: 一、公司资质证明 营业执照:需要提供公司的营业执照副本,用于申请企业支付、域名备案、APP上架及…...

告别论文初稿焦虑!ChatGPT让你轻松完成写作!

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 在面对繁琐的论文写作时,很多人都会遇到无从下手的困惑,尤其是论文初稿阶段,往往需要大量的时间来组织思路和编写内容。然而,随着AI技术的发展,像…...

mongodb 数据迁移,亲测成功!

mysql进行数据迁移,最简单的不过是导出sql,然后在运行sql,数据也自然迁移过去了。 可是mongodb里,我们存储的是文件,是怎么做到的呢,当我在翻阅网上博客的时候,并没有发现有这方面的顾虑。 当…...

如何使用ssm实现疫情居家办公OA系统

TOC 10902ssm疫情居家办公OA系统 系统概述 进过系统的分析后,就开始记性系统的设计,系统设计包含总体设计和详细设计。总体设计只是一个大体的设计,经过了总体设计,我们能够划分出系统的一些东西,例如文件、文档、数…...

深入了解 MySQL 中的 JSON_CONTAINS

深入了解 MySQL 中的 JSON_CONTAINS MySQL 5.7 及更高版本引入了对 JSON 数据类型的支持,使得在数据库中存储和查询 JSON 数据成为可能。在这些新功能中,JSON_CONTAINS 函数是一个非常有用的工具,允许我们检查一个 JSON 文档是否包含特定的值…...

宝藏推荐:精选十款知识库搭建软件

当今这个信息爆炸的时代,高效地管理和利用知识成为了各行各业追求的目标。无论是企业内部的协作,还是对外提供的信息服务,一个强大的知识库都是不可或缺的。为了帮助大家更好地守护和利用知识宝藏,以下是精选的十款知识库搭建软件…...

go语言接口设计三国人物

题目 请设计一个接口Person,然后设计两个结构体实现Person接口,这两个结构体都代表三国时代的名人。Person接口中有一个方法,该方法输出一句最能代表该人物特点的话。 程序 package main import ("fmt") type Person interface …...

day-63 优质数对的总数 II

思路 nums1[i] 可以被 nums2[j] * k 整除,所以nums[i]/k的所有因子都符合条件,问题转换为遍历nums1,统计nums[i]/k的因子出现次数,然后遍历nums2,如果nums2[i]是某一个因子,将其出现次数加入答案中即可 解题过程 利用哈希表统计出…...

基于 Prometheus+Grafana+Alertmanager 搭建 K8S 云监控告警平台(附配置告警至QQ、钉钉)

文章目录 一、机器规划二、部署安装 node-exporter、prometheus、Grafana、kube-state-metrics1、创建 monitor-sa 命名空间2、安装node-exporter组件2.1、说明2.2、应用资源清单2.3、通过node-exporter采集数据 3、k8s 集群中部署 prometheus3.1、创建一个 sa 账号3.2、将 sa …...