Docker 安装Nginx与配置Nginx

文章目录
  • 前言
    • 1.什么是nginx
    • 2.为什么使用nginx
    • 3.高并发
    • 4.Nginx特点:
  • 一、docker安装nginx
  • 二、Nginx配置简介
    • 1.文件讲解
    • 2.nginx.conf
    • 3.default.conf
  • 三、nginx负载均衡
    • 1.配置服务器列表地址
    • 2.多集群策略
      • 2.1 权重配置
      • 2.2 ip_hash
      • 2.3 least_conn
      • 2.4 fair
      • 2.5 url_hash
    • 3.nginx缓存配置
  • 四 nginx路由规则
    • 1.匹配格式
    • 2.location匹配优先级
    • 3.location的匹配流程
  • 五、 nginx页面拦截
  • 六、 nginx动静分离
  • 总结

前言

1.什么是nginx

   Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,ginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好

2.为什么使用nginx

在传统的Web项目中,并发量小,用户使用的少。所以在低并发的情况下,用户可以直接访问tomcat服务器,然后tomcat服务器返回消息给用户。

用户访问<-->Tomcat服务器

而在互联网项目下,因单个tomcat默认并发量有限制。如果请求量过大,会产生如下问题:

Tomcat8 默认配置的最大请求数是 150,也就是说同时支持 150 个并发,当然了,也可以将其改大。
当某个应用拥有 250 个以上并发的时候,应考虑应用服务器的集群。
具体能承载多少并发,需要看硬件的配置,CPU 越多性能越高,分配给 JVM 的内存越多性能也就越高,但也会加重 GC 的负担。
操作系统对于进程中的线程数有一定的限制:
Windows 每个进程中的线程数不允许超过 2000
Linux 每个进程中的线程数不允许超过 1000
Tomcat的最大并发数是可以配置的,实际运用中,最大并发数与硬件性能和CPU数量都有很大关系的。更好的硬件,更多的处理器都会使Tomcat支持更多的并发。
maxThreads="150" 最大并发数 
minSpareThreads="10"///初始化时创建的线程数
maxSpareThreads="500"///一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。

在这里插入图片描述

3.高并发

是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。
高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。

响应时间: 系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。

吞吐量: 单位时间内处理的请求数量。

QPS: 每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。

并发用户数: 同时承载正常使用系统功能的用户数量。

高可用(High Availability)
通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。
(一直都能用 99.9999%)

高性能:
是指服务响应时间快,(CPU/处理器/内存)特别是在高并发下响应时间不会急剧增加。

4.Nginx特点:

高并发、高性能,
可扩展性好,
高可靠性,
热部署,
BSD许可证。

对于反向代理和正向代理这篇文章讲的很仔细了
正向代理和反向代理

提示:以下是本篇文章正文内容,下面案例可供参考

一、docker安装nginx

docker run -d --name mynginx --restart=always -v /home/nginx/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/default.conf:/etc/nginx/conf.d/default.conf -p 8080:80 -t nginx

提示:我是安装在/home/nginx目录下的,所以先建这个目录 mkdir nginx。

-v
表示文件挂载,用法: -v 本地挂载文件:容器目标文件。

-d
容器将在后台以守护进程的形式运行,而不会阻塞终端。

–restart=always
运行容器时使用–restart参数可以指定一个restart策略,来指示在退出时容器应该如何重启或不应该重启。

no – 容器退出时不要自动重启。这个是默认值。

on-failure[:max-retries] – 只在容器以非0状态码退出时重启。可选的,可以退出docker daemon尝试重启容器的次数。

always – 不管退出状态码是什么始终重启容器。当指定always时,docker daemon将无限次数地重启容器。容器也会在daemon启动时尝试重启,不管容器当时的状态如何。

unless-stopped – 不管退出状态码是什么始终重启容器,不过当daemon启动时,如果容器之前已经为停止状态,不要尝试启动它。

查看nginx版本可以通过命令 docker inspect nginx 查看
在这里插入图片描述

二、Nginx配置简介

1.文件讲解

 文件挂载到本地后会看到两个文件default.conf  nginx.conf

default.conf:
默认的 nginx 配置文件
nginx.conf:
nginx的主配置文件,它包含了全局配置和一些默认的设置,影响整个nginx服务器的行为,这个文件通常用于配置一些全局性的参数。

2.nginx.conf

cat nginx.confuser  nginx;
#Nginx 主配置文件中的一个重要选项,用于指定 Nginx 服务器的工作进程数。
#每个工作进程都是一个独立的 Nginx 进程,用于处理客户端请求
#Nginx 将根据可用的 CPU 核数动态确定工作进程的数量。这样可以更好地利用多核系统的性能。
#例如:worker_processes  4,配置4个线程
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;#配置与连接处理相关的参数,如最大连接数
events {worker_connections  1024;
}#配置 HTTP 服务器的参数,设定http服务器,利用它的反向代理功能提供负载均衡支持
http {#引入其他配置文件,通常用于模块化配置。在conf/mime.types查看支持哪些类型include       /etc/nginx/mime.types;default_type  application/octet-stream;#配置日志格式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;#是否使用sendfile传输文件sendfile        on;#tcp_nopush     on;#连接超时时间keepalive_timeout  65;#gzip  on;include /etc/nginx/conf.d/*.conf;
}

3.default.conf

server {##配置监听端口listen       80;listen  [::]:80;#配置服务器名server_name  localhost;#access_log  /var/log/nginx/host.access.log  main;location / {root   /usr/share/nginx/html;index  index.html index.htm;}#配置404页面#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#配置50x页面error_page   500 502 503 504  /50x.html;#精确匹配 location = /50x.html {#root是配置服务器的默认网站根目录位置,在nginx目录下htmlroot   /usr/share/nginx/html;}#这是转发php脚本代理到127.0.0.1:80的Apache侦听# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ .php$ {#    proxy_pass   http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ .php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##禁止访问 .htxxx 文件#location ~ /.ht {#    deny  all;#}
}

三、nginx负载均衡

1.配置服务器列表地址

修改配置文件 vim default.conf
注意:我们nginx容器启动时-p 8080:80, 下面8001,8002,8003端口为别对应的三个web容器服务,也需要在启动时映射端口到80端口,例如 -p 8001:80

upstream servercluster {server 127.0.0.1:8001;server 127.0.0.1:8002;server 127.0.0.1:8003;}

然后需要在 location / {…}中进行配置

location / {#root   /usr/share/nginx/html;#index  index.html index.htm;proxy_pass   http://servercluster;}

2.多集群策略

轮询

默认方式

weight

权重方式

ip_hash

依据ip分配方式

least_conn

最少连接方式

fair(第三方)

响应时间方式

url_hash(第三方)

依据url分配方式

注意:在没有配置情况下默认轮询策略

2.1 权重配置

例如:

#权重越大,命中概率更高 weight,可按照服务器资源来分配
upstream servercluster {server 127.0.0.1:8001  weight=5;server 127.0.0.1:8002  weight=3;server 127.0.0.1:8003  weight=2;}
2.2 ip_hash

指定负载均衡按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到对应的服务器,以保证session会话。这样每个方可都固定访问一个后端服务器,可以解决session不能跨服务器的问题。
例如:

#权重越大,命中概率更高 weight,可按照服务器资源来分配
upstream servercluster {ip_hash; #server 127.0.0.1:8001  weight=5;server 127.0.0.1:8002  weight=3;server 127.0.0.1:8003  weight=2;}
2.3 least_conn

把请求转发给链接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是有些请求占用的时间很长会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果

upstream servercluster {least_conn; #把请求转发给链接数量较少的后端服务器server 127.0.0.1:8001  weight=5;server 127.0.0.1:8002  weight=3;server 127.0.0.1:8003  weight=2;}
2.4 fair

按照服务端的响应时间来分配请求,响应时间短的有限分配

upstream servercluster {server 127.0.0.1:8001;  server 127.0.0.1:8002; server 127.0.0.1:8003; fair;  #实现响应时间短的优先分配}
2.5 url_hash

按照访问url的hash结果来分配请求,使用每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会达到不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash可以使用同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存了资源,再次收到请求,就可以从缓存中获取

upstream servercluster {hash  $request_urlserver 127.0.0.1:8001;  server 127.0.0.1:8002; server 127.0.0.1:8003; }

3.nginx缓存配置

通过命令进入到nginx容器中,docker exec -it mynginx bash。
在 /etc/nginx文件夹下建立一个data文件夹用于做nginx缓存。
然后再本地关在文件的主配置文件配置缓存目录经

proxy_cache_path /etc/nginx/data levels=1:2
keys_zone=web_cache:50m inactive=1m max_size=1g

levels:表示有两层文件夹
keys_zone:之情缓存key和缓存50m
max_size:缓存最大1g
在这里插入图片描述
然后还需要配置default.conf 开启反向代理数据
proxy_store off; #反向代理数据
proxy_redirect off;
proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host KaTeX parse error: Expected 'EOF', got '#' at position 110: …id 200 304 2m; #̲响应200 304 进行缓存 …request_uri; #使用当前url地址作为当前缓存key

在这里插入图片描述
注意:修改任何配置文件后都需要重启nginx容器 docker restart mynginx

最终呈现文件
在这里插入图片描述

四 nginx路由规则

1.匹配格式

这个"/" 表示的是匹配路由规则进行路由转发的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/d8c050917d414ae1988081d0bd99b02f.jpeg
我们可以在里面写过个location进行路由匹配:

符号

规则

=

开头表示精准匹配

~

大小写敏感

~*

忽略大小写

^~

只需匹配url开头

@

定义一个命名的location,在内部定向时使用

location [ = | ~* | ^~ ] /url/ {…}
location @name {…}

规则使用匹配方式如下:
在这里插入图片描述
deny,设置禁止访问的IP

#禁止IP:192.168.1.1访问
location / {deny   192.168.1.1;}   #禁止所有IP访问
location / {deny   all;}

allow,设置允许访问的IP

#只允许IP:192.168.1.1访问
location / {allow  192.168.1.1;}#允许所有IP访问
location / {allow   all;}

deny和allow的优先级

nginx的权限指令是从上往下执行的,在同一个块下deny和allow指令同时存在时,谁先匹配谁就会起作用,后面的权限指令就不会执行了。如下图,如果 “deny 111.111.111.111” 触发了,那它后面的两条都不会触发。

location / {deny 192.168.1.1;allow 192.168.1.2;deny 192.168.1.3;}

其实他们的关系就像 “if…else if…else if”,谁先触发,谁起作用。

if (deny 192.168.1.1) {...}
else if (allow 192.168.1.2) {...}
else if (deny 192.168.1.3) {...}

2.location匹配优先级

在配置中需要注意的一点就是location的匹配规则和优先级

  • = 开头表示精确匹配
  • ^~ 开头表示url以某个常规字符串开头,不是正则匹配;
  • ~ 开头表示区分大小写的正则匹配
  • ~* 开头表示不区分大小的正则匹配
  • / 通用匹配,如果没有其他匹配,任何请求都会匹配到;

3.location的匹配流程

1.、判断是否精准匹配,如果匹配,直接返回结果并结束搜索匹配过程
2.、判断是否普通匹配,如果匹配,看是否包含^~前缀,包含则返回,否则记录匹配结果location时返回或记录最长匹配的那个
3.、判断是否正则匹配,按配置文件里的正则表达式的顺序,由上到下开始匹配,一旦匹配结果成功,并结束搜索匹配过程.
4.、如果正则匹配没有匹配到结果,则返回步骤2记录的匹配结果

五、 nginx页面拦截

在请求通过nginx的时候,在针对某些场景的使用做特殊处理,比如错误页面,返回指定错误页,例如:
在这里插入图片描述
当前默认是在无法响应对应请求的情况下,默认在/usr/share/nginx/html文件下找到50x.html文件,返回页面50x.html
在这里插入图片描述

在这里插入图片描述
既然是可以配置,我们也可以将自定义的文件复制到对应的目录下面在进行配置。
使用docker cp /url/xxx.html 容器名:ngnix docker中的目标文件下,在修改配置成对应的文件名称

六、 nginx动静分离

对于前端的项目:可以是一个静态服务器或资源池; --可以吧各种静态文件都匹配到nginx中,可以直接请求nginx可以响应不同页面
对于后端项目:做反向代理;
动静分离:需要动态的时候,就做转发请求,需要静态的时候,就直接返回静态页面(直接响应我们的结果)

需求场景:在客户端发起请求时,nginx会转发到服务器服务器然后返回一个静态文件,如果反复请求相同静态文件都需要去转发到服务器,就会增加开销,性能降低,我们就可以将静态文件报错到nginx中,下次请求就直接返回。

基于.net6解决方式:
1.需要写一个生成静态文件的中间件,保存到指定目录,在项目通过docker启动时挂载到宿主机文件夹下

app.UseStaticPage("/app/data/staticfile", true, true);/// <summary>/// Middleware/// </summary>public class StaticPageMiddleware{private readonly RequestDelegate _next;private string _directoryPath = null;private bool _supportDelete = false;private bool _supportWarmup = false;public StaticPageMiddleware(RequestDelegate next, string directoryPath, bool supportDelete, bool supportWarmup){this._next = next;this._directoryPath = directoryPath;this._supportDelete = supportDelete;this._supportWarmup = supportWarmup;}/// <summary>/// 任意HTTP请求,都要经过这个方法/// /// 如何抓到响应,并保存成HTML静态页/// </summary>/// <param name="context"></param>/// <returns></returns>public async Task InvokeAsync(HttpContext context){if (context.Request.Path.Value!.StartsWith("/item/"))//规则支持自定义{Console.WriteLine($"This is StaticPageMiddleware InvokeAsync {context.Request.Path.Value}");#region context.Response.Bodyvar originalStream = context.Response.Body;using (var copyStream = new MemoryStream()){context.Response.Body = copyStream;await _next(context);//后续的常规流程,正常请求响应copyStream.Position = 0;var reader = new StreamReader(copyStream);var content = await reader.ReadToEndAsync();string url = context.Request.Path.Value;this.SaveHtml(url, content);copyStream.Position = 0;await copyStream.CopyToAsync(originalStream);context.Response.Body = originalStream;}#endregion}else{await _next(context);}}private void SaveHtml(string url, string html){try{if (string.IsNullOrWhiteSpace(html))return;if (!url.EndsWith(".html"))return;if (Directory.Exists(_directoryPath) == false)Directory.CreateDirectory(_directoryPath);var totalPath = Path.Combine(_directoryPath, url.Split("/").Last());File.WriteAllText(totalPath, html);//直接覆盖}catch (Exception ex){Console.WriteLine(ex.Message);}}/// <summary>/// 删除某个页面/// </summary>/// <param name="url"></param>/// <param name="index"></param>private void DeleteHmtl(string url){try{if (!url.EndsWith(".html"))return;var totalPath = Path.Combine(_directoryPath, url.Split("/").Last());File.Delete(totalPath);//直接删除}catch (Exception ex){Console.WriteLine($"Delete {url} 异常,{ex.Message}");}}/// <summary>/// 清理文件,支持重试/// </summary>/// <param name="index">最多重试次数</param>private void ClearDirectory(int index){if (index > 0){try{var files = Directory.GetFiles(_directoryPath);foreach (var file in files){File.Delete(file);}}catch (Exception ex){Console.WriteLine($"ClearDirectory failed {ex.Message}");ClearDirectory(index--);}}}}/// <summary>/// 扩展中间件/// </summary>public static class StaticPageMiddlewareExtensions{/// <summary>/// /// </summary>/// <param name="app"></param>/// <param name="directoryPath">文件写入地址,文件夹目录</param>/// <param name="supportDelete">是否支持删除</param>/// <param name="supportClear">是否支持全量删除</param>/// <returns></returns>public static IApplicationBuilder UseStaticPage(this IApplicationBuilder app, string directoryPath, bool supportDelete, bool supportClear){return app.UseMiddleware<StaticPageMiddleware>(directoryPath, supportDelete, supportClear);}}

2.nginx也需要通过挂载将项目挂载在宿主机的静态文件也挂载到nginx的docker容器中,然后通过修改配置来指定对应的静态文件
在这里插入图片描述
OK!!!!!!!!!!!!!

总结

nginx主要的就是一个配置,如有补充或者有差异的地方,麻烦再评论下面指出,共勉!!!!!

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

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

相关文章

qwen2.5 模型JSON格式化输出案例

这篇不是通过prompt提示去实现,是用vllm、ollama推理框架支持;这里也给出个prompt实现的案例参考 1、 vllm推理 参考:https://docs.vllm.ai/en/latest/usage/structured_outputs.html 模型vllm运行: 用的Qwen/Qwen2.5-3B-Instruct模型 vllm serve ./qwen2_5 --host 0.0…

黑马商城微服务复习(6)

MQ高级 1. 消息可靠性2. 发送者的可靠性1. 发送者问题2. 生产者重试机制3. 生产者确认机制4. MQ可靠性5. 消费者的可靠性 3. 延迟消息1. 定义2. 死信交换机 1. 消息可靠性 发送消息时丢失&#xff1a; 生产者发送消息时连接MQ失败生产者发送消息到达MQ后未找到Exchange生产者发…

UE5.5 Geometry库平面切割原理分析

平面切割--FMeshPlaneCut 平面定义: 面上一个点 法线 算法流程如下 求几何体所有顶点和面的有向距离(Signs) Sign计算&#xff1a; float Sign (VertexPos - PlaneOrigin).Dot(PlaneNormal); 遍历所有几何体所有交叉边, 进行SplitEdge 对于位于切割面两侧的交叉边(Sign…

TMS Software:TMS BIZ产品——TMS XData

TMS XData 用于多层REST/JSON HTTP/HTTPS应用服务器开发和ORM远程处理的Delphi框架。 TMS扩展数据可同时用于以下框架&#xff1a; VCLWEBFMX TMS XData可同时用于以下操作系统/浏览器&#xff1a; TMS XData可同时用于以下IDE&#xff1a; 功能概述 基于REST/JSON架构风格的…

优化移动端H5:常见问题与解决方案

移动端H5开发中的“坑”与解决方案 本文介绍了开发中遇到的几个关于移动端H5开发中的小问题&#xff0c;以及解决的方法。 一、iOS滑动不流畅问题 在iOS设备上&#xff0c;H5页面的滑动效果有时会出现不流畅的情况&#xff0c;特别是在页面高度超过一屏时。这通常是由于iOS的…

【论文速读】| AttackQA:利用微调及开源大语言模型辅助网络安全运营的数据集的开发与应用

基本信息 原文标题: AttackQA: Development and Adoption of a Dataset for Assisting Cybersecurity Operations Using Fine-Tuned and Open-Source LLMs 原文作者: Varun Badrinath Krishna 作者单位: SambaNova Systems 关键词: 网络安全、检索增强生成&#xff08;RAG&…

Ubuntu24.04配置STMTrack

项目地址&#xff1a;https://github.com/fzh0917/STMTrack 一、安装 CUDA 参考链接&#xff1a; Ubuntu24.04配置DINO-Tracker Ubuntu多CUDA版本安装及切换 由于之前在其他项目中已经安装了 CUDA12.1&#xff0c;这次需要安装另一个版本。 1. 查看安装版本 按照 requireme…

服务器数据恢复—热备盘上线过程中硬盘离线导致raid5阵列崩溃的数据恢复案例

服务器数据恢复环境&#xff1a; 两组分别由4块SAS接口硬盘组建的raid5阵列&#xff0c;两组raid5阵列划分LUN并由LVM管理&#xff0c;格式化为EXT3文件系统。 服务器故障&#xff1a; RAID5阵列中一块硬盘未知原因离线&#xff0c;热备盘自动激活上线替换离线硬盘。在热备盘上…

【Java学习笔记】Map接口和常用方法

一、 Map接口实现类的 特点[很实用] key是自己存的java对象 value是一个固定的 //当有相同的 k ,就等价于替换. 二、 Map常用方法 &#xff08;根据键–>k&#xff09; 三、Map接口遍历方法 package com.hspedu.map_; import java.util.*; /** * author 韩顺平 * ver…

1.网络知识-IP与子网掩码的关系及计算实例

IP与子网掩码 说实话&#xff0c;之前没有注意过&#xff0c;今天我打开自己的办公地电脑&#xff0c;看到我的网络配置如下&#xff1a; 我看到我的子网掩码是255.255.254.0&#xff0c;我就奇怪了&#xff0c;我经常见到的子网掩码都是255.255.255.0啊&#xff1f;难道公司配…

SpringBoot中bean的生命周期

文章目录 概述使用场景代码演示bean初始化TestSupportBeanPostProcessorImpllog 代码 概述 Bean 生命周期管理是 Spring Boot 中的关键功能之一。它负责管理应用程序中的 Java 对象&#xff0c;这些对象被称为 Beans。Spring Boot 通过创建、配置、初始化和销毁这些 Beans 来确…

【数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 测试说明 我的通关代码: 测试结果&#xff1a; 任务描述 本关任务&#xff1a;编写一个程序利用栈判断左、右圆括号是否配对。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;栈对括号的处理。 栈对括号的处理 &…

让PPT不再“难搞”:智能工具如何改变办公体验

PPT的世界是一场属于设计感与逻辑力的双重较量。那些字体配色的小心思&#xff0c;排版设计的大考验&#xff0c;无不让人抓耳挠腮。然而&#xff0c;科技的加持让这一切正悄然改变。比如&#xff0c;随着 ai生成ppt 工具的兴起&#xff0c;许多复杂操作正被重新定义&#xff0…

OpenLayers基础教程——WebGLPoints设置不同图标样式的方法

1、前言 在OpenLayers中&#xff0c;WebGLPoints与VectorLayer设置不同图标样式的方法有所不同。本文就来介绍一下如何在WebGLPoints图层中根据要素类型设置不同的图标样式。 2、ol.layer.Vector的实现方法 ol.layer.Vector设置不同图标的样式很简单&#xff0c;直接上代码&…

浅谈Kubernetes(K8s)之RC控制器与RS控制器

1.RC控制器 1.1RC概述 Replication Controller 控制器会持续监控正在运行的Pod列表&#xff0c;并保证相应类型的Pod的数量与期望相符合&#xff0c;如果Pod数量过少&#xff0c;它会根据Pod模板创建新的副本&#xff0c;反之则会删除多余副本。通过RC可实现了应用服务的高可用…

es 3期 第14节-全文文本分词查询

#### 1.Elasticsearch是数据库&#xff0c;不是普通的Java应用程序&#xff0c;传统数据库需要的硬件资源同样需要&#xff0c;提升性能最有效的就是升级硬件。 #### 2.Elasticsearch是文档型数据库&#xff0c;不是关系型数据库&#xff0c;不具备严格的ACID事务特性&#xff…

如何保证消息队列的高可用?(RabbitMQ)

RabbitMQ 是基于主从&#xff08;非分布式&#xff09;做高可用性的&#xff0c;RabbitMQ 有三种模式&#xff1a;单机模式、普通集群模式、镜像集群模式 1、单机模式&#xff1a;一般没人生产用单机模式 2、普通集群模式&#xff1a; 普通集群模式用于提高系统的吞吐量&…

CAPL如何设置或修改CANoe TCP/IP协议栈的底层配置

在CANoe中创建网络节点作为以太网主机时,可以给其配置独立的TCP/IP Stack。 配置的协议栈有一些底层配置参数可以在界面上设置或修改,比如: MTU上图中MTU显示500只是图形界面显示错误,正确值是1500。 TCP延迟确认这些参数也可以通过CAPL动态配置,甚至CAPL还可以配置很多界…

Linux中vi和vim的区别详解

文章目录 Linux中vi和vim的区别详解一、引言二、vi和vim的起源与发展三、功能和特性1、语法高亮2、显示行号3、编辑模式4、可视化界面5、功能扩展6、插件支持 四、使用示例1、启动编辑器2、基本操作 五、总结 Linux中vi和vim的区别详解 一、引言 在Linux系统中&#xff0c;vi和…

如何将自己的PHP类库发布到composer仓库

将自己的 PHP 类库发布到 Composer 仓库&#xff0c;需要经过一系列的准备和操作步骤&#xff0c;以下是详细说明&#xff1a; 准备工作 创建类库项目&#xff1a;确保你的 PHP 类库项目具有清晰的目录结构&#xff0c;遵循 PSR-4 等 PHP 编码规范。通常&#xff0c;类文件应…