面试知识点梳理及相关面试题(十三)-- nginx

📅 2026/7/14 13:24:54
面试知识点梳理及相关面试题(十三)-- nginx
1. 什么是正向代理和反向代理1.1 正向代理如果把局域网外的 Internet 想象成一个巨大的资源库则局域网中的客户端要访问 Internet则需要通过代理服务器来访问这种代理服务就称为正向代理。用途访问原来无法访问的资源可以做缓存加速访问资源1.2 反向代理反向代理其实客户端对代理是无感知的因为客户端不需要任何配置就可以访问我们只需要将请求发送到反向代理服务器由反向代理服务器去选择目标服务器获取数据后再返回给客户端此时反向代理服务器和目标服务器对外就是一个服务器暴露的是代理服务器地址隐藏了真实服务器 IP 地址作用保证内网的安全。隐藏后端服务器的信息屏蔽黑名单中的 IP限制每个客户端的连接数。提高可扩展性和灵活性。客户端只能看到反向代理服务器的 IP这使你可以增减服务器或者修改它们的配置。缓存。直接返回命中的缓存结果静态内容直接返回HTML/CSS/JS、图片、视频等负载均衡通过反向代理服务器来优化网站的负载1.3 区别正向代理中proxy(代理)和client(客户端)同属一个LAN对server(服务端)透明server不知道谁访问了你反向代理中proxy和server同属一个LAN对client透明client不知道访问的具体是谁2. 负载均衡概念单个服务器解决不了我们增加服务器的数量原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上将负载分发到不同的服务器也就是我们所说的负载均衡3. 动静分离概念为了加快网站的解析速度可以把 动态页面 和 静态页面 由不同的服务器来解析加快解析速度。降低原来单个服务器的压力4. 什么是nginxNginx (“engine x”) 是一个轻量级、高性能的 HTTP 和 反向代理服务器特点是占有内存少并发能力强能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。5. 为什么要使用nginx跨平台、配置简单、反向代理、高并发连接处理2-3万并发连接数官方监测能支持5万并发内存消耗小开启10个nginx才占150M内存 nginx处理静态文件好耗费内存少而且Nginx内置的健康检查功能如果有一个服务器宕机会做一个健康检查再发送的请求就不会发送到宕机的服务器了。重新将请求提交到其他的节点上。使用Nginx的话还能节省宽带支持GZIP压缩可以添加浏览器本地缓存稳定性高宕机的概率非常小接收用户请求是异步的5.1 缺点动态处理差nginx处理静态文件好,耗费内存少但是处理动态页面则很鸡肋现在一般前端用nginx作为反向代理抗住压力。6. 为什么Nginx性能这么高nginx如何实现高并发因为他的事件处理机制单线程异步非阻塞事件处理机制运用了epoll模型提供了一个队列排队解决6.1 异步非阻塞事件机制如何运行如果一个 server 采用一个进程(或者线程)负责一个request的方式那么进程数就是并发数。那么显而易见的就是会有很多进程在等待中。等什么最多的应该是等待网络传输。而 Nginx 的异步非阻塞工作方式正是利用了这点等待的时间。在需要等待的时候这些进程就空闲出来待命了。因此表现为少数几个进程就解决了大量的并发问题。Nginx是如何利用的呢简单来说同样的 4 个进程如果采用一个进程负责一个 request 的方式那么同时进来 4 个 request 之后每个进程就负责其中一个直至会话关闭。期间如果有第 5 个request进来了。就无法及时反应了因为 4 个进程都没干完活呢因此一般有个调度进程每当新进来了一个 request 就新开个进程来处理。Nginx 不这样每进来一个 request 会有一个 worker 进程去处理。但不是全程的处理处理到什么程度呢处理到可能发生阻塞的地方比如向上游后端服务器转发 request 并等待请求返回。那么这个处理的 worker 不会这么傻等着他会在发送完请求后注册一个事件“如果 upstream 返回了告诉我一声我再接着干”。于是他就休息去了。此时如果再有 request 进来他就可以很快再按这种方式处理。而一旦上游服务器返回了就会触发这个事件worker 才会来接手这个 request 才会接着往下走。这就是为什么说Nginx 基于事件模型。由于 web server 的工作性质决定了每个 request 的大部份生命都是在网络传输中实际上花费在 server 机器上的时间片不多。这是几个进程就解决高并发的秘密所在。即webserver 刚好属于网络 IO 密集型应用不算是计算密集型。异步非阻塞使用 epoll 和大量细节处的优化。也正是 Nginx 之所以然的技术基石。6.2 为什么不使用多线程采用单线程来异步非阻塞处理请求管理员可以配置Nginx主进程的工作进程的数量不会为每个请求分配cpu和内存资源节省了大量资源同时也减少了大量的CPU的上下文切换所以才使得Nginx支持更高的并发。6.3 nginx是如何实现高并发的简单来讲就是 异步非阻塞使用了epoll和大量的底层代码优化nginx采用一个master进程多个woker进程的模式。master进程主要负责收集、分发请求。当一个请求过来时master拉起一个worker进程负责处理这个请求。master进程也要负责监控woker的状态保证高可靠性woker进程一般设置为跟cpu核心数一致。nginx的woker进程跟apache不一样。apche的进程在同一时间只能处理一个请求所以它会开很多个进程几百甚至几千个。而nginx的woker进程在同一时间可以处理额请求数只受内存限制因此可以处理多个请求。7. nginx是如何处理请求的DNS解析器解析域名得到具体的ip地址访问到此台服务器的nginxnginx接收一个请求后首先由listen和server_name指令匹配server模块再匹配server模块里的locationlocation就是实际地址可以是地址也可以是服务也可以是一个转发http{server{# 第一个Server区块开始表示一个独立的虚拟主机站点 listen80 # 提供服务的端口默认80server_name localhost # 提供服务的域名主机名 location/{# 第一个location区块开始 root html # 站点的根目录相当于Nginx的安装目录 index index.html index.htm # 默认的首页文件多个用空格分开}},......server{listen9001;server_name localhost;location~/eduservice/{proxy_pass http://localhost:8001;}location~/eduoss/{proxy_pass http://localhost:8002;}}}8. nginx的目录结构[rootlocalhost~]# tree/usr/local/nginx/usr/local/nginx ├── client_body_temp ├── conf #Nginx所有配置文件的目录 │ ├── fastcgi.conf # fastcgi相关参数的配置文件 │ ├── fastcgi.conf.default# fastcgi.conf的原始备份文件 │ ├── fastcgi_params # fastcgi的参数文件 │ ├── fastcgi_params.default│ ├── koi-utf │ ├── koi-win │ ├── mime.types # 媒体类型 │ ├── mime.types.default│ ├── nginx.conf #Nginx主配置文件 │ ├── nginx.conf.default│ ├── scgi_params # scgi相关参数文件 │ ├── scgi_params.default│ ├── uwsgi_params # uwsgi相关参数文件 │ ├── uwsgi_params.default│ └── win-utf ├── fastcgi_temp # fastcgi临时数据目录 ├── html #Nginx默认站点目录 │ ├──50x.html # 错误页面优雅替代显示文件例如当出现502错误时会调用此页面 │ └── index.html # 默认的首页文件 ├── logs #Nginx日志目录 │ ├── access.log # 访问日志文件 │ ├── error.log # 错误日志文件 │ └── nginx.pid # pid文件Nginx进程启动后会把所有进程的ID号写到此文件 ├── proxy_temp # 临时目录 ├── sbin #Nginx命令目录 │ └── nginx #Nginx的启动命令 ├── scgi_temp # 临时目录 └── uwsgi_temp # 临时目录9. nginx.conf有哪些属性模块worker_processes1 # worker进程的数量 events{# 事件区块开始 worker_connections1024 # 每个worker进程支持的最大连接数}# 事件区块结束 http{#HTTP区块开始 include mime.types #Nginx支持的媒体类型库文件 default_type application/octet-stream # 默认的媒体类型 sendfile on # 开启高效传输模式 keepalive_timeout65 # 连接超时 server{# 第一个Server区块开始表示一个独立的虚拟主机站点 listen80 # 提供服务的端口默认80server_name localhost # 提供服务的域名主机名 location/{# 第一个location区块开始 root html # 站点的根目录相当于Nginx的安装目录 index index.html index.htm # 默认的首页文件多个用空格分开}# 第一个location区块结果 error_page500502503504/50x.html # 出现对应的http状态码时使用50x.html回应客户 location/50x.html{# location区块开始访问50x.html root html # 指定对应的站点目录为html}}......10. Nginx虚拟主机怎么配置?基于域名的虚拟主机通过域名来区分虚拟主机——应用外部网站基于端口的虚拟主机通过端口来区分虚拟主机——应用公司内部网站外部网站的管理后台基于ip的虚拟主机。10.1 基于虚拟主机配置域名需要建立/data/www /data/bbs目录windows本地hosts添加虚拟机ip地址对应的域名解析对应域名网站目录下新增index.html文件#当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/www目录下文件 server{listen80;server_name www.lijie.com;location/{root data/www;index index.html index.htm;}}10.2 基于端口的虚拟主机使用端口来区分浏览器使用域名或ip地址:端口号访问#当客户端访问www.lijie.com,监听端口号为8080,直接跳转到data/www目录下文件 server{listen8080;server_name www.lijie.com;location/{root data/www;index index.html index.htm;}}#当客户端访问www.lijie.com,监听端口号为80直接跳转到真实ip服务器地址127.0.0.1:8080server{listen80;server_name www.lijie.com;location/{proxy_pass http://127.0.0.1:8080;index index.html index.htm;}}11. location的作用是什么location指令的作用是根据用户请求的URI来执行不同的应用也就是根据用户请求的网站URL进行匹配匹配成功即进行相关的操作。11.1 location语法匹配符匹配规则优先级精确匹配1^~以某个字符开头2~区分大小写的正则匹配3~*不区分大小写的正则匹配4!~区分大小写不匹配的正则5!~*不区分大小写不匹配的正则6/通用匹配任何请求都会匹配到7注意~ 代表自己输入的英文字母11.2 location正则案例#优先级1,精确匹配根路径 location/{return400;}#优先级2,以某个字符串开头,以av开头的优先匹配这里区分大小写 location^~/av{root/data/av/;}#优先级3区分大小写的正则匹配匹配/media*****路径 location~/media{alias/data/static/;}#优先级4不区分大小写的正则匹配所有的****.jpg|gif|png 都走这里 location~*.*\.(jpg|gif|png|js|css)${root/data/av/;}#优先7通用匹配 location/{return403;}12. 限流怎么做的Nginx限流就是限制用户请求速度防止服务器受不了限流有3种正常限制访问频率正常流量突发限制访问频率突发流量限制并发连接数Nginx的限流都是基于漏桶流算法底下会说道什么是桶铜流12.1 正常限制访问频率正常流量限制一个用户发送的请求我Nginx多久接收一个请求。Nginx中使用ngx_http_limit_req_module模块来限制的访问频率限制的原理实质是基于漏桶算法原理来实现的。在nginx.conf配置文件中可以使用limit_req_zone命令及limit_req命令限制单个IP的请求处理频率。#定义限流维度一个用户一分钟一个请求进来多余的全部漏掉 limit_req_zone $binary_remote_addr zoneone:10m rate1r/m;#绑定限流维度 server{location/seckill.html{limit_req zonezone;proxy_pass http://lj_seckill;}}1r/s代表1秒一个请求1r/m一分钟接收一个请求 如果Nginx这时还有别人的请求没有处理完Nginx就会拒绝处理该用户请求12.2 突发限制访问频率突发流量限制一个用户发送的请求我Nginx多久接收一个。上面的配置一定程度可以限制访问频率但是也存在着一个问题如果突发流量超出请求被拒绝处理无法处理活动时候的突发流量这时候应该如何进一步处理呢Nginx提供burst参数结合nodelay参数可以解决流量突发的问题可以设置能处理的超过设置的请求数外能额外处理的请求数。我们可以将之前的例子添加burst参数以及nodelay参数#定义限流维度一个用户一分钟一个请求进来多余的全部漏掉 limit_req_zone $binary_remote_addr zoneone:10m rate1r/m;#绑定限流维度 server{location/seckill.html{limit_req zonezone burst5nodelay;proxy_pass http://lj_seckill;}}为什么就多了一个 burst5 nodelay; 呢多了这个可以代表Nginx对于一个用户的请求会立即处理前五个多余的就慢慢来落没有其他用户的请求我就处理你的有其他的请求的话我Nginx就漏掉不接受你的请求12.3 限制并发连接数Nginx中的ngx_http_limit_conn_module模块提供了限制并发连接数的功能可以使用limit_conn_zone指令以及limit_conn执行进行配置。接下来我们可以通过一个简单的例子来看下http{limit_conn_zone $binary_remote_addr zonemyip:10m;limit_conn_zone $server_name zonemyServerName:10m;}server{location/{limit_conn myip10;limit_conn myServerName100;rewrite/http://www.lijie.net permanent;}}上面配置了单个IP同时并发连接数最多只能10个连接并且设置了整个虚拟服务器同时最大并发数最多只能100个链接。当然只有当请求的header被服务器处理后虚拟服务器的连接数才会计数。刚才有提到过Nginx是基于漏桶算法原理实现的实际上限流一般都是基于漏桶算法和令牌桶算法实现的。13. 漏桶流算法和令牌桶算法知道13.1 漏桶算法漏桶算法是网络世界中流量整形或速率限制时经常使用的一种算法它的主要目的是控制数据注入到网络的速率平滑网络上的突发流量。漏桶算法提供了一种机制通过它突发流量可以被整形以便为网络提供一个稳定的流量。也就是我们刚才所讲的情况。漏桶算法提供的机制实际上就是刚才的案例突发流量会进入到一个漏桶漏桶会按照我们定义的速率依次处理请求如果水流过大也就是突发流量过大就会直接溢出则多余的请求会被拒绝。所以漏桶算法能控制数据的传输速率。13.2 令牌桶算法令牌桶算法是网络流量整形和速率限制中最常使用的一种算法。典型情况下令牌桶算法用来控制发送到网络上的数据的数目并允许突发数据的发送。Google开源项目Guava中的RateLimiter使用的就是令牌桶控制算法。令牌桶算法的机制如下系统会维护一个令牌token桶以一个恒定的速度往桶里放入令牌token这时如果有请求进来想要被处理则需要先从桶里获取一个令牌token当桶里没有令牌token可取时则该请求将被拒绝服务。令牌桶算法通过控制桶的容量、发放令牌的速率来达到对请求的限制。。14. 为什么要做动静分离Nginx是当下最热的Web容器网站优化的重要点在于静态化网站网站静态化的关键点则是是动静分离动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来动静资源做好了拆分以后我们则根据静态资源的特点将其做缓存操作。让静态的资源只走静态资源服务器动态的走动态的服务器Nginx的静态处理能力很强但是动态处理能力不足因此在企业中常用动静分离技术。对于静态资源比如图片jscss等文件我们则在反向代理服务器nginx中进行缓存。这样浏览器在请求一个静态资源时代理服务器nginx就可以直接处理无需将请求转发给后端服务器tomcat。若用户请求的动态文件比如servlet,jsp则转发给Tomcat服务器处理从而实现动静分离。这也是反向代理服务器的一个重要的作用。当然因为现在七牛、阿里云等 CDN 服务已经很成熟主流的做法是把静态资源缓存到 CDN 服务中从而提升访问速度。14.1 Nginx怎么做的动静分离只需要指定路径对应的目录。location/可以使用正则表达式匹配。并指定对应的硬盘中的目录。如下操作都是在Linux上server{listen80;server_name ws.licaidie.top;location/image/{root/usr/local/static/;autoindex on;}}创建目录mkdir /usr/local/static/image进入目录cd /usr/local/static/image放一张照片上去1.jpg重启 nginxsudo nginx -s reload打开浏览器 输入server_name/image/1.jpg就可以访问该静态图片了14.2 什么叫 CDN 服务CDN 即内容分发网络。其目的是通过在现有的 Internet中 增加一层新的网络架构将网站的内容发布到最接近用户的网络边缘使用户可就近取得所需的内容提高用户访问网站的速度。一般来说因为现在 CDN 服务比较大众所以基本所有公司都会使用 CDN 服务。15. Nginx负载均衡的算法怎么实现的?策略有哪些?为了避免服务器崩溃大家会通过负载均衡的方式来分担服务器压力。将对台服务器组成一个集群当用户访问时先访问到一个转发服务器再由转发服务器将访问分发到压力更小的服务器。Nginx负载均衡实现的策略有以下五种15.1 轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器如果后端某个服务器宕机能自动剔除故障系统。upstream backserver{server192.168.0.12;server192.168.0.13;}15.2 权重 weightweight的值越大分配到的访问概率越高主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值达到合理有效的地利用主机资源。#权重越高在被访问的概率越大如上例分别是20%80%upstream backserver{server192.168.0.12weight2;server192.168.0.13weight8;}15.3 ip_hash( IP绑定)每个请求按访问IP的哈希结果分配使来自同一个IP的访客固定访问一台后端服务器并且可以有效解决动态网页存在的session共享问题upstream backserver{ip_hash;server192.168.0.12:88;server192.168.0.13:80;}15.4 fair(第三方插件)必须安装upstream_fair模块。对比 weight、ip_hash更加智能的负载均衡算法fair算法可以根据页面大小和加载时间长短智能地进行负载均衡响应时间短的优先分配。哪个服务器的响应速度快就将请求分配到哪个服务器上。upstream backserver{server server1;server server2;fair;}15.5 url_hash(第三方插件)必须安装Nginx的hash软件包按访问url的hash结果来分配请求使每个url定向到同一个后端服务器可以进一步提高后端缓存服务器的效率。upstream backserver{server squid1:3128;server squid2:3128;hash $request_uri;hash_method crc32;}16. Nginx配置高可用性怎么配置当上游服务器(真实访问服务器)一旦出现故障或者是没有及时相应的话应该直接轮询到下一台服务器保证服务器的高可用server{listen80;server_name www.lijie.com;location/{### 指定上游服务器负载均衡服务器 proxy_pass http://backServer;###nginx与上游服务器(真实访问的服务器)超时时间 后端服务器连接的超时时间_发起握手等候响应超时时间 proxy_connect_timeout1s;###nginx发送给上游服务器(真实访问的服务器)超时时间 proxy_send_timeout1s;### nginx接受上游服务器(真实访问的服务器)超时时间 proxy_read_timeout1s;index index.html index.htm;}}17. Rewrite全局变量是什么$remote_addr//获取客户端ip$binary_remote_addr//客户端ip二进制)$remote_port//客户端port如50472$remote_user//已经经过Auth Basic Module验证的用户名$host//请求主机头字段否则为服务器名称如:blog.sakmon.com$request//用户请求信息如GET ?a1b2 HTTP/1.1$request_filename//当前请求的文件的路径名由root或alias和URI request组合而成如/2013/81.html$status//请求的响应状态码,如:200$body_bytes_sent// 响应时送出的body字节数数量。即使连接中断这个数据也是精确的,如40$content_length// 等于请求行的“Content_Length”的值$content_type// 等于请求行的“Content_Type”的值$http_referer// 引用地址$http_user_agent// 客户端agent信息,如Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.76 Safari/537.36$args//与$query_string相同 等于当中URL的参数(GET)如a1b2$document_uri//与$uri相同 这个变量指当前的请求URI不包括任何参数(见$args) 如:/2013/81.html$document_root//针对当前请求的根路径设置值$hostname//如centos53.localdomain$http_cookie//客户端cookie信息$cookie_COOKIE//cookie COOKIE变量的值$is_args//如果有$args参数这个变量等于”?”否则等于”空值如?$limit_rate//这个变量可以限制连接速率0表示不限速$query_string// 与$args相同 等于当中URL的参数(GET)如a1b2$request_body// 记录POST过来的数据信息$request_body_file//客户端请求主体信息的临时文件名$request_method//客户端请求的动作通常为GET或POST,如GET$request_uri//包含请求参数的原始URI不包含主机名如/2013/81.html?a1b2$scheme//HTTP方法如httphttps,如http$uri//这个变量指当前的请求URI不包括任何参数(见$args) 如:/2013/81.html$request_completion//如果请求结束设置为OK. 当请求未结束或如果该请求不是请求链串的最后一个时为空(Empty)如OK$server_protocol//请求使用的协议通常是HTTP/1.0或HTTP/1.1如HTTP/1.1$server_addr//服务器IP地址在完成一次系统调用后可以确定这个值$server_name//服务器名称如blog.sakmon.com$server_port//请求到达服务器的端口号,如8018.Nginx如何限制访问18.1 限制ip# 如果访问的ip地址为192.168.9.115,则返回403if($remote_addr192.168.9.115){return403;}18.2 限制浏览器## 不允许谷歌浏览器访问 如果是谷歌浏览器返回500if($http_user_agent~Chrome){return500;}19. Nginx 常用命令有哪些启动 nginx 。 停止 nginx-s stop 或 nginx-s quit 。 重启 nginx-s reload 或 service nginx reload 。 重载指定配置文件.nginx-c/usr/local/nginx/conf/nginx.conf 。 查看 nginx 版本 nginx-v 。20. nginx报500、502、503、504 有什么区别500 Internal Server Error 内部服务错误比如脚本错误编程语言语法错误。502 Bad Gateway错误网关错误。比如服务器当前连接太多响应太慢页面素材太多、带宽慢。503 Service Temporarily Unavailable服务不可用web服务器不能处理HTTP请求ip超频访问导致限流或者 临时超载或者是服务器进行停机维护。504 Gateway timeout 网关超时程序执行时间过长导致响应超时例如程序需要执行20秒而nginx最大响应等待时间为10秒这样就会出现超时。21. 什么是C10K问题?所谓c10k问题指的是服务器如何支持10k个并发连接也就是concurrent 10000 connection这也是c10k这个名字的由来 C10K问题是指无法同时处理大量客户端(10,000)的网络套接字。解决方案 详细请看C10k问题简述_爱思考的实践者的博客-CSDN博客_c10k问题为每个连接分配一个独立的线程/进程。同一个线程/进程同时处理多个连接IO多路复用。21. nginx的七层负载均衡21.1 四层负载均衡所谓四层负载均衡是指OSI七层模型中的传输层, 那么传输层Nginx已经支持TCP/IP的控制, 所以只需要对客户端的请求进行TCP/IP协议的包转发就可以实现负载, 那么他的好处是性能非常快, 只需要底层进行应用处理,而不需要进行一些复杂的逻辑.21.2 七层负载均衡七层负载均衡是在应用层,那么他可以完成后很多应用方面的协议请求,当然四层有四层的好处,七层七层的好处,四层就不支持协议的转发,(http,https,DNS等)只支持IP但是它的速度快.应用层虽然没有四层负载快,但是支持很多功能,比如说他支持http信息的改写、头部信息的改写、意识是七层代理着用户往后请求的时候把我们用户请求的头部信息加上长连接协议也可以修改等、安全应用规则控制、URL匹配规则控制、以及转发、rewrite等一些规则所以在应用层的服务里面可以做的内容就更多了。Nginx是一个典型的七层负载均衡21.3 四层和七层的区别四层负载均衡数据在底层就进行了分发而七层负载均衡数据包则是在最顶层进行分发由此可以看出七层负载均衡效率没有四层负载均衡高。但是七层负载均衡更贴近于服务如HTTP协议就是七层协议我们可以用Nginx可以作会话保持URL路径规则匹配head头改写等等这些都是四层负载均衡无法实现的。注意四层负载均衡不识别域名七层负载均衡识别域名21.4 OSI七层模型从低到高分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。应用层网络服务与最终用户的一个接口常见的协议有HTTP FTP SMTP SNMP DNS.表示层数据的表示、安全、压缩。确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。会话层建立、管理、终止会话,对应主机进程指本地主机与远程主机正在进行的会话.传输层定义传输数据的协议端口号以及流控和差错校验,协议有TCP UDP.网络层进行逻辑地址寻址实现不同网络之间的路径选择,协议有ICMP IGMP IP等.数据链路层在物理层提供比特流服务的基础上建立相邻结点之间的数据链路。物理层建立、维护、断开物理连接。22. Nginx 如何实现后端服务的健康检查方式一利用 nginx 自带模块 ngx_http_proxy_module 和 ngx_http_upstream_module 对后端节点做健康检查。方式二(推荐)利用 nginx_upstream_check_module 模块对后端节点做健康检查。23. nginx 如何开启压缩开启nginx gzip压缩后网页、css、js等静态资源的大小会大大的减少从而可以节约大量的带宽提高传输效率给用户快的体验。虽然会消耗cpu资源但是为了给用户更好的体验是值得的。开启的配置如下将以上配置放到nginx.conf的http{ … }节点中。http{# 开启gzip gzip on;# 启用gzip压缩的最小文件小于设置值的文件将不会被压缩 gzip_min_length1k;# gzip 压缩级别1-10gzip_comp_level2;# 进行压缩的文件类型。 gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;# 是否在http header中添加Vary:Accept-Encoding建议开启 gzip_vary on;}保存并重启nginx刷新页面为了避免缓存请强制刷新就能看到效果了。gzip虽然好用但是以下类型的资源不建议启用。图片类型原因图片如jpg、png本身就会有压缩所以就算开启gzip后压缩前和压缩后大小没有多大区别所以开启了反而会白白的浪费资源。Tips可以试试将一张jpg图片压缩为zip观察大小并没有多大的变化。虽然zip和gzip算法不一样但是可以看出压缩图片的价值并不大大文件原因会消耗大量的cpu资源且不一定有明显的效果。24. nginx常见的优化配置有哪些24.1 调整worker_processes指Nginx要生成的worker数量,最佳实践是每个CPU运行1个工作进程。了解系统中的CPU核心数输入$ grep processor / proc / cpuinfo | wc -l24.2 最大化worker_connectionsNginx Web服务器可以同时提供服务的客户端数。与worker_processes结合使用时获得每秒可以服务的最大客户端数最大客户端数/秒工作进程*工作者连接数为了最大化Nginx的全部潜力应将工作者连接设置为核心一次可以运行的允许的最大进程数1024。24.3 启用Gzip压缩压缩文件大小减少了客户端http的传输带宽因此提高了页面加载速度建议的gzip配置示例如下:( 在http部分内gzip on;gzip_vary on;gzip_proxied any;gzip_comp_level1;gzip_buffers168k;gzip_http_version1.1;gzip_types text/plain text/css application/json application/javascript text/xml application/xmlrss text/javascript;24.4 为静态文件启用缓存为静态文件启用缓存以减少带宽并提高性能可以添加下面的命令限定计算机缓存网页的静态文件location~*.(jpg|jpeg|png|gif|ico|css|js)${expires365d;}24.5 Timeoutskeepalive连接减少了打开和关闭连接所需的CPU和网络开销获得最佳性能需要调整的变量可参考client_body_timeout12;client_header_timeout12;keepalive_timeout15;send_timeout10;24.6 禁用access_logs访问日志记录它记录每个nginx请求因此消耗了大量CPU资源从而降低了nginx性能。完全禁用访问日志记录access_log off;如果必须具有访问日志记录则启用访问日志缓冲access_log/var/log/nginx/access.log buffer4096k参考https://blog.csdn.net/qq_29974229/article/details/125718921更多可查看https://blog.csdn.net/crazymakercircle/article/details/128684641