day13_微服务监控Nginx(微服务集成SBA)

文章目录

  • 1 微服务系统监控
    • 1.1 监控系统的意义
    • 1.2 SBA监控方案
    • 1.3 SBA实战
      • 1.3.1 创建SBA服务端
      • 1.3.2 微服务集成SBA
    • 1.4 微服务集成logback
    • 1.5 配置邮件告警
  • 2 Nginx
    • 2.1 Nginx简介
    • 2.2 下载和安装
      • 2.2.1 方式1:window本地安装
        • 2.2.1.1 下载
        • 2.2.1.2 安装
        • 2.2.1.3 目录结构
        • 2.2.1.4 常用命令
      • 2.2.2 docker安装
        • 2.2.2.1 创建nginx容器
        • 2.2.2.2 目录结构
    • 2.5 Nginx应用
      • 2.5.1 配置文件结构
      • 2.5.2 部署静态资源
        • 概念介绍
        • 案例演示
      • 2.5.3 反向代理
        • 概念介绍
        • 案例演示
      • 2.5.4 负载均衡
        • 概念介绍
        • 案例演示
        • 负载均衡算法
          • 常见算法介绍
          • random算法
          • url_hash算法
          • ip_hash算法
          • weight算法
          • least_conn算法
      • 2.5.5 完整配置参考

1 微服务系统监控

1.1 监控系统的意义

微服务系统监控对于一个企业来说非常重要,因为它能够提供以下几个方面的价值:

1、提高系统稳定性和可靠性:微服务架构中的每个服务都是独立的,因此出现故障的概率也会增加。监控系统可以实时地检测并报告各个服务的状态和性能数据,及时发现并解决问题,提高系统的稳定性和可靠性。

2、提高服务质量和用户体验:微服务系统监控可以帮助企业追踪和分析服务性能数据,如响应时间、请求成功率、错误率等,从而了解服务的运行情况,并及时采取措施来提高服务质量和用户体验。

3、提高运维效率和降低成本:微服务系统监控可以自动收集和分析各个服务的运行数据,帮助企业快速发现和解决问题,从而提高运维效率并降低成本。此外,监控数据还可以帮助企业优化资源分配和容量规划,减少资源浪费和成本开销。

4、帮助企业预测和规避风险:微服务系统监控可以帮助企业实时了解服务的运行情况,预测和规避可能出现的问题和风险,保障系统的稳定性和可靠性,从而避免损失和影响

总之,微服务系统监控可以帮助企业及时发现和解决问题,提高系统稳定性和可靠性,优化服务质量和用户体验,提高运维效率和降低成本,预测和规避风险,是企业微服务架构中不可或缺的一部分。

1.2 SBA监控方案

官网地址:https://docs.spring-boot-admin.com/

Spring Boot Admin:Spring Boot Admin是一个用于管理和监控Spring Boot应用程序的开源项目。它提供了一个用户友好的Web界面,可以方便地查看和管理运行中的Spring Boot应用程序。

Spring Boot Admin具有以下主要功能:

1、应用程序监控:Spring Boot Admin可以监控注册到其上的Spring Boot应用程序的运行状态、健康状况、内存使用情况、线程信息等。它通过与Spring Boot Actuator集成来获取这些信息,并以可视化的方式展示在管理界面上。

2、集中式配置管理:Spring Boot Admin允许您在管理界面上对注册的Spring Boot应用程序进行配置管理。您可以动态修改应用程序的配置属性,而无需重新启动应用程序。

3、日志管理:Spring Boot Admin提供了对应用程序日志的集中式管理和查看功能。您可以在管理界面上查看应用程序的日志输出,并根据需要进行搜索和过滤。

4、通知和告警:Spring Boot Admin支持通过电子邮件、Slack等方式发送通知和告警。您可以设置特定的规则和阈值,当应用程序达到或超过这些规则时,将会触发相应的通知。

5、安全性和权限控制:Spring Boot Admin提供了安全性和权限控制机制,可以限制对管理界面的访问,并为不同的用户或角色分配不同的权限。

在这里插入图片描述

Spring Boot Admin是一个基于客户端-服务器架构的应用程序管理和监控工具。它由两个主要组件组成:Admin Server(服务器)和Admin Client(客户端)。

1、Admin Server(服务器): Admin Server是Spring Boot Admin的核心组件,负责提供Web界面和API接口,用于管理和监控注册到其上的Spring Boot应用程序。Admin Server通过HTTP或HTTPS与Admin Client进行通信,并收集应用程序的运行状态、健康状况、配置信息、日志等数据。它还提供了用户认证和权限控制机制,以确保安全访问。

2、Admin Client(客户端): Admin Client是被管理的Spring Boot应用程序,它通过将Spring Boot Actuator与Admin Server集成来实现与Admin Server的通信。Admin Client在启动时会向Admin Server注册自己,并定期发送心跳信息和应用程序的运行状态、健康状况等数据给Admin Server。Admin Client还可以接收来自Admin Server的命令和配置更新,并根据需要执行相应的操作。

1.3 SBA实战

1.3.1 创建SBA服务端

具体步骤:

1、在cloud-parent下创建一个监控微服务(cloud-sba),加入如下依赖:

<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>3.1.0</version>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2、编写启动类

@SpringBootApplication
@EnableAdminServer
public class AdminApplication {public static void main(String[] args) {SpringApplication.run(AdminApplication.class , args) ;}}

3、创建配置文件

# application.yml文件内容
server:port: 20100
spring:application:name: spzx-cloud-sbacloud:nacos:discovery:server-addr: 192.168.136.142:8848

4、启动监控服务,通过http://localhost:20100访问监控服务后台管理系统

1.3.2 微服务集成SBA

具体步骤如下所示:

1、在spzx-cloud-parent模块中添加如下依赖

<dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId><version>3.1.0</version>
</dependency>

2、在指定的微服务配置文件中加入如下依赖

management:endpoints:web:exposure:include: "*"    # 开启所有需要监控的指标端点endpoint:health:show-details: always

3、重启微服务,通过sba服务端查看微服务相关信息

在这里插入图片描述

注意:如果显示服务offline,开启飞行模式,重启微服务再次查看

1.4 微服务集成logback

在resources目录下创建一个logback-spring.xml文件,内容如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 日志存放路径 --><property name="log.path" value="F://logs/spzx-cloud-order" /><!-- 日志输出格式 --><property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /><!-- 控制台输出 --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%highlight${log.pattern}</pattern></encoder></appender><!-- 系统日志输出 --><appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/info.log</file><!-- 循环政策:基于时间创建日志文件 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 日志文件名格式 --><fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 日志最大的历史 30天 --><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>${log.pattern}</pattern></encoder></appender><!-- 系统模块日志级别控制  --><logger name="com.atguigu" level="info" /><!-- Spring日志级别控制  --><logger name="org.springframework" level="warn" /><root level="info"><appender-ref ref="console" /><appender-ref ref="file_info" /></root></configuration>

在application.yml配置文件中添加如下配置

management:endpoint:logfile:external-file: F://logs/spzx-cloud-order//info.log

此时就可以在SBA的监控界面查询到Spring Boot应用所产生的配置文件。

1.5 配置邮件告警

Spring Boot Admin 可以与多种告警系统集成,例如 PagerDuty、Slack、邮件等,以便在应用程序状态异常时通知管理员。在这里,我将为您介绍如何在 Spring Boot Admin 中集成邮件告警功能。

具体步骤如下所示: XZREOKNYIMQRPHSA

1、开通邮件服务器(以163邮箱为例说明)

在这里插入图片描述

按照提示操作,会得到一个授权码,后期发送邮件的时候需要使用,注意授权码只会显示一次:

在这里插入图片描述

2、在SBA服务端添加如下依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>

3、在配置文件中添加如下配置

spring:mail:host: smtp.163.comport: 465username: hly_atguigu@163.compassword: JKMBEQUUBDJUEAXXproperties:mail:smtp:auth: truestarttls:   # 使用 SSL 安全协议,须如下配置enable: truerequired: trueprotocol: smtps   # 465端口使用的通讯协议为smtpsboot:admin:notify:mail:to: hly_atguigu@163.comfrom: hly_atguigu@163.comenabled: truefilter:health-status: DOWN       # 邮件通知策略,当微服务下线的时候发送通知邮件monitor:default-timeout: 30000

重启SBA服务,手动下线spzx-cloud-order进行测试。

2 Nginx

2.1 Nginx简介

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx的网站有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

官网:https://nginx.org/

2.2 下载和安装

2.2.1 方式1:window本地安装

2.2.1.1 下载

在Nginx的官网的下载页面中(http://nginx.org/en/download.html),就展示了当前Nginx版本,并提供了下载的连接。 如下:

在这里插入图片描述

在本项目中,我们所学习的Nginx选择的是windows版本的稳定版本的1.24.0这个版本,我们可以直接从官网下载,当然在我们的课程资料中也已经提供了该版本的安装包。

2.2.1.2 安装

windows版本的nginx安装比较简单,只需要将其解压到一个不带中文的目录下即可。

2.2.1.3 目录结构

安装完Nginx后,我们可以切换到Nginx的安装目录,先来熟悉一下Nginx的目录结构,如下图:

在这里插入图片描述

重点目录和文件如下:

目录/文件说明备注
conf配置文件的存放目录
conf/nginx.confNginx的核心配置文件conf下有很多nginx的配置文件,我们主要操作这个核心配置文件
html存放静态资源(html, css, )部署到Nginx的静态资源都可以放在html目录中
logs存放nginx日志(访问日志、错误日志等)
nginx.exe二进制文件,用于启动、停止Nginx服务
2.2.1.4 常用命令

Nginx中,我们的二进制可执行文件就是nginx.exe,虽然只有一个可执行文件,但是我们可以通过该指令配合不同的参数达到更加强大的功能。接下来,我们就演示一下Nginx常见指令, 在执行下面的指令时,都需要在nginx的安装目录下执行。

常用命令如下所示:

nginx -v     						# 查看nginx的版本
nginx -t							# 检测配置文件
nginx								# 启动nginx、nginx启动成功以后会有两个进程, 也可以通过直接双击exe文件进行启动

nginx启动成功以后,我们可以直接访问Nginx的80端口, http://localhost

在这里插入图片描述

nginx -s stop                   # 停止nginx服务
nginx -s reload				  # 重新加载nginx的配置文件

注意:windows系统nginx经常无法正常关闭,可以查找端口占用进程并杀死进程

netstat -ano | findstr 端口号
taskkill /f /pid 进程id

2.2.2 docker安装

2.2.2.1 创建nginx容器
#拉取镜像
docker pull nginx:latest#运行nginx镜像:  
docker run -d -p 80:80 \
--name sc-nginx \
-v nginx-html:/usr/share/nginx/html \
-v nginx-conf:/etc/nginx/ \
-v nginx-logs:/var/log/nginx  nginx
2.2.2.2 目录结构
#  查看nginx的挂载卷目录
docker volume ls |grep nginx
# nginx配置文件目录
#local     nginx-conf
# nginx静态页面目录
#local     nginx-html
# nginx日志目录
#local     nginx-logs

2.5 Nginx应用

介绍了并安装了Nginx之后,本章节将要讲解的是Nginx的使用,我们主要从以下四个方面进行讲解。

2.5.1 配置文件结构

nginx的配置文件(conf/nginx.conf)整体上分为三部分: 全局块、events块、http块。这三块的分别配置什么样的信息呢,看下表:

nginx配置文件查看:

view /var/lib/docker/volumes/nginx-conf/_data/nginx.conf
区域职责
全局块配置和nginx运行相关的全局配置
events块配置和网络连接相关的配置
http块配置代理、缓存、日志记录、虚拟主机等配置

具体结构图如下:

在这里插入图片描述

注意:在全局块、events块以及http块中,我们经常配置的是http块。在http块中可以包含多个server块,每个server块可以配置多个location块。

2.5.2 部署静态资源

概念介绍

Nginx可以作为静态web服务器来部署静态资源。这里所说的静态资源是指在服务端真实存在,并且能够直接展示的一些文件,比如常见的html页面、css文件、js文件、图片、视频等资源。

相对于Tomcat,Nginx处理静态资源的能力更加高效,所以在生产环境下,一般都会将静态资源部署到Nginx中。

将静态资源部署到Nginx非常简单,只需要将文件复制到Nginx安装目录下的html目录中即可。

server {listen 80;				#监听端口	server_name localhost;	#服务器名称location / {			#匹配客户端请求urlroot html;			#指定静态资源根目录index index.html;	#指定默认首页}
}

在资料中,我们提供了一个静态的html文件,我们需要将这个文件部署到nginx中,然后通过nginx访问html静态资源。

案例演示

在资料中,我们提供了一个静态的html文件,我们需要将这个文件部署到nginx中,然后通过nginx访问html静态资源。

1、将静态资源复制到 nginx安装目录的html目录中

在这里插入图片描述

2、启动nginx

3、打开浏览器进行访问:输入http://localhost/hello.html。

4、配置首页,当输入http://localhost地址的时候,默认访问的首页,首页的配置如下所示:

在这里插入图片描述

如果我们需要将hello.html作为nginx的首页,可以修改location的index指令,配置为hello.html,如下:

在这里插入图片描述

配置完毕后,我们可以通过指令,来检查配置文件是否配置正确: nginx -t

在这里插入图片描述

配置文件修改了,我们需要重新加载一下,才可以生效:

# windows
nginx.exe -s reload
# docker
docker restart sc-nginx

5、访问:http://192.168.1.170

在这里插入图片描述

2.5.3 反向代理

概念介绍

正向代理

正向代理服务器是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。

正向代理一般是在客户端设置代理服务器,通过代理服务器转发请求,最终访问到目标服务器。在使用代理服务器的时候需要在客户端进行代理服务器地址的相关配置。

在这里插入图片描述

反向代理

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源,反向代理服务器负责将请求转发给目标服务器。用户不需要知道目标服务器的地址,也无须在用户端作任何设定,对于用户来说,访问反向代理服务器是完全无感知的。

在这里插入图片描述

那么在本小节,我们就是要使用nginx来作为反向代理服务器使用。 在nginx中,我们可以在nginx.conf中配置反向代理:

server {listen 82;server_name localhost;location / {proxy_pass http://localhost:8081; 	# 反向代理配置,将请求转发到指定服务[网关服务]}
}

上述配置的含义为: 当我们访问nginx的82端口时,根据反向代理配置,会将请求转发到 http://localhost:8081 对应的服务上。

案例演示

1、整体访问流程介绍

在这里插入图片描述

2、启动相关微服务(spzx-cloud-gateway、spzx-cloud-user)

在这里插入图片描述

3、在nginx中配置反向代理

找到nginx的配置文件nginx.conf,在http块中,再添加一个server块虚拟主机的配置,监听82端口,并配置反向代理proxy_pass:

server {listen 82;server_name localhost;location / {proxy_pass http://localhost:8081; 	# 反向代理配置,将请求转发到指定服务[网关服务]}
}

4、检查配置文件,并重新加载

nginx -t   				# 检查配置文件是否正确
nginx -s reload			# 重新加载配置文件

5、访问: localhost:82/api/user/findUserByUserId/1?authorization=admin

在这里插入图片描述

2.5.4 负载均衡

概念介绍

早期的网站流量和业务功能都比较简单,单台服务器就可以满足基本需求,但是随着互联网的发展,业务流量越来越大并且业务逻辑也越来越复杂,单台服务器的性能及单点故障问题就凸显出来了,因此需要多台服务器组成应用集群,进行性能的水平扩展以及避免单点故障出现。

**应用集群:**将同一应用部署到多台机器上,组成应用集群,接收负载均衡器分发的请求,进行业务处理并返回响应数据

**负载均衡器:**将用户请求根据对应的负载均衡算法分发到应用集群中的一台服务器进行处理

在这里插入图片描述

此处的负载均衡器,我们将会使用Nginx来实现,而Nginx的负载均衡是基于反向代理的,只不过此时所代理的服务器不是一台,而是多台。

案例演示

1、启动两个spzx-cloud-gateway服务,端口号分别是8081和8082,可以通过配置启动参数进行实现:-Dserver.port=8081

在这里插入图片描述

2、在nginx中配置负载均衡

打开nginx的配置文件nginx.conf并增加如下配置:

#upstream指令可以定义一组服务器
upstream targetserver{	server localhost:8081;server localhost:8082;
}server {listen       83;server_name  localhost;location / {proxy_pass http://targetserver;}
}

3、检查配置文件,并重新加载

nginx -t   				# 检查配置文件是否正确
nginx -s reload			# 重新加载配置文件

4、测试时,我们直接访问nginx的8080端口(http://localhost:83/api/user/findUserByUserId/1?authorization=admin), 此时nginx会根据负载均衡策略,将请求转发到后面的两台服务器。

负载均衡算法
常见算法介绍

在nginx中提供了很多的负载均衡算法,常见的负载均衡算法如下所示:

名称说明特点
round robin轮询方式默认的负载均衡算法,按照请求的顺序依次分配给后端服务器。
random随机随机选择一个后端服务器来处理请求
url_hash依据url分配方式根据客户端请求url的hash值,来分发请求, 同一个url请求, 会发转发到同一个服务器上
ip_hash依据ip分配方式根据客户端请求的IP地址计算hash值, 根据hash值来分发请求, 同一个IP发起的请求, 会发转发到同一个服务器上
weight权重方式根据权重分发请求,权重大的分配到请求的概率大
least_conn依据最少连接方式哪个服务器当前处理的连接少, 请求优先转发到这台服务器
random算法
#upstream指令可以定义一组服务器
upstream targetserver {random;server localhost:8081;server localhost:8082;
}
url_hash算法
#upstream指令可以定义一组服务器
upstream targetserver {hash $request_uri;server localhost:8081;server localhost:8082;
}
ip_hash算法
#upstream指令可以定义一组服务器
upstream targetserver {ip_hash;server localhost:8081;server localhost:8082;
}
weight算法
#upstream指令可以定义一组服务器
upstream targetserver {server localhost:8081 weight=5;server localhost:8082 weight=1; 
}
least_conn算法
#upstream指令可以定义一组服务器
upstream targetserver {least_conn;server localhost:8081 ;server localhost:8082 ; 
}

2.5.5 完整配置参考

#安全问题,建议用nobody,不要用root.
#user  nobody;#worker数和服务器的cpu数相等是最为适宜
worker_processes  2;#work绑定cpu(4 work绑定4cpu)
worker_cpu_affinity 0001 0010 0100 1000#work绑定cpu (4 work绑定8cpu中的4个) 。
worker_cpu_affinity 0000001 00000010 00000100 00001000  #error_log path(存放路径) level(日志等级) path表示日志路径,level表示日志等级,
#具体如下:[ debug | info | notice | warn | error | crit ]
#从左至右,日志详细程度逐级递减,即debug最详细,crit最少,默认为crit。 #error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {#这个值是表示每个worker进程所能建立连接的最大值,所以,一个nginx能建立的最大连接数,应该是worker_connections * worker_processes。#当然,这里说的是最大连接数,对于HTTP请求本地资源来说,能够支持的最大并发数量是worker_connections * worker_processes,#如果是支持http1.1的浏览器每次访问要占两个连接,#所以普通的静态访问最大并发数是: worker_connections * worker_processes /2,#而如果是HTTP作为反向代理来说,最大并发数量应该是worker_connections * worker_processes/4。#因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。worker_connections  1024;  #这个值是表示nginx要支持哪种多路io复用。#一般的Linux选择epoll, 如果是(*BSD)系列的Linux使用kquene。#windows版本的nginx不支持多路IO复用,这个值不用配。use epoll;# 当一个worker抢占到一个链接时,是否尽可能的让其获得更多的连接,默认是off 。multi_accept on; //并发量大时缓解客户端等待时间。# 默认是on ,开启nginx的抢占锁机制。accept_mutex  on; //master指派worker抢占锁
} http {#当web服务器收到静态的资源文件请求时,依据请求文件的后缀名在服务器的MIME配置文件中找到对应的MIME Type,再根据MIME Type设置HTTP Response的Content-Type,然后浏览器根据Content-Type的值处理文件。 include       mime.types;  #/usr/local/nginx/conf/mime.types#如果 不能从mime.types找到映射的话,用以下作为默认值-二进制default_type  application/octet-stream;#日志位置access_log  logs/host.access.log  main;#一条典型的accesslog:#101.226.166.254 - - [21/Oct/2013:20:34:28 +0800] "GET /movie_cat.php?year=2013 HTTP/1.1" 200 5209 "http://www.baidu.com" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; MDDR; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322; Tablet PC 2.0); 360Spider"#1)101.226.166.254:(用户IP)#2)[21/Oct/2013:20:34:28 +0800]:(访问时间) #3)GET:http请求方式,有GET和POST两种#4)/movie_cat.php?year=2013:当前访问的网页是动态网页,movie_cat.php即请求的后台接口,year=2013为具体接口的参数#5)200:服务状态,200表示正常,常见的还有,301永久重定向、4XX表示请求出错、5XX服务器内部错误#6)5209:传送字节数为5209,单位为byte#7)"http://www.baidu.com":refer:即当前页面的上一个网页#8)"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; #.NET CLR 3.0.30729; Media Center PC 6.0; MDDR; .NET4.0C; .NET4.0E; .NET CLR 1.1.4322; Tablet PC 2.0); 360Spider": agent字段:通常用来记录操作系统、浏览器版本、浏览器内核等信息log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';#开启从磁盘直接到网络的文件传输,适用于有大文件上传下载的情况,提高IO效率。sendfile        on; //大文件传递优化,提高效率#一个请求完成之后还要保持连接多久, 默认为0,表示完成请求后直接关闭连接。#keepalive_timeout  0;keepalive_timeout  65; #开启或者关闭gzip模块#gzip  on ; //文件压缩,再传输,提高效率#设置允许压缩的页面最小字节数,页面字节数从header头中的Content-Length中进行获取。#gzip_min_lenth 1k;//超过该大小开始压缩,否则不用压缩# gzip压缩比,1 压缩比最小处理速度最快,9 压缩比最大但处理最慢(传输快但比较消耗cpu)#gzip_comp_level 4;#匹配MIME类型进行压缩,(无论是否指定)"text/html"类型总是会被压缩的。#gzip_types types text/plain text/css application/json  application/x-javascript text/xml   #动静分离#服务器端静态资源缓存,最大缓存到内存中的文件,不活跃期限open_file_cache max=655350 inactive=20s;   #活跃期限内最少使用的次数,否则视为不活跃。open_file_cache_min_uses 2;#验证缓存是否活跃的时间间隔 open_file_cache_valid 30s;upstream myserver{# 1、轮询(默认)# 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。# 2、指定权重# 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。#3、IP绑定 ip_hash# 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。#4、备机方式 backup# 正常情况不访问设定为backup的备机,只有当所有非备机全都宕机的情况下,服务才会进备机。当非备机启动后,自动切换到非备机# ip_hash;server 192.168.161.132:8080 weight=1;server 192.168.161.132:8081 weight=1 backup;#5、fair(第三方)公平,需要安装插件才能用#按后端服务器的响应时间来分配请求,响应时间短的优先分配。   #6、url_hash(第三方)#按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。# ip_hash;server 192.168.161.132:8080 weight=1;server 192.168.161.132:8081 weight=1;#fair#hash $request_uri#hash_method crc32}#保留代理之前的host 包含客户端真实的域名和端口号proxy_set_header    Host  $host; #保留代理之前的真实客户端ipproxy_set_header    X-Real-IP  $remote_addr; #这个Header和X-Real-IP类似,但它在多级代理时会包含真实客户端及中间每个代理服务器的IPproxy_set_header    X-Forwarded-For  $proxy_add_x_forwarded_for;#表示客户端真实的协议(http还是https)proxy_set_header X-Forwarded-Proto $scheme;server {#监听端口号listen       80;#服务名server_name  192.168.161.130;#字符集#charset utf-8;#location [=|~|~*|^~] /uri/ { … }   # = 精确匹配# ~ 正则匹配,区分大小写# ~* 正则匹配,不区分大小写# ^~  关闭正则匹配#匹配原则:# 1、所有匹配分两个阶段,第一个叫普通匹配,第二个叫正则匹配。# 2、普通匹配,首先通过“=”来匹配完全精确的location#   2.1、 如果没有精确匹配到, 那么按照最大前缀匹配的原则,来匹配location#   2.2、 如果匹配到的location有^~,则以此location为匹配最终结果,如果没有那么会把匹配的结果暂存,继续进行正则匹配。# 3、正则匹配,依次从上到下匹配前缀是~或~*的location, 一旦匹配成功一次,则立刻以此location为准,不再向下继续进行正则匹配。# 4、如果正则匹配都不成功,则继续使用之前暂存的普通匹配成功的location.#不是以波浪线开头的都是普通匹配。location ~  /(css|data|fonts|img|js){root /opt/static;}location / {   # 匹配任何查询,因为所有请求都以 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。# nginx上传文件大小限制client_max_body_size 600M;client_body_buffer_size 600M;#定义服务器的默认网站根目录位置#相对路径,省略了./  root   html;#绝对路径 /user/local/nginx/html  root /user/local/nginx/html;#默认访问首页索引文件的名称index  index.html index.html;#反向代理路径proxy_pass http://myserver;#反向代理的超时时间proxy_connect_timeout 10;proxy_redirect default;}#普通匹配location  /images/ {    root images ;}# 反正则匹配location ^~ /images/jpg/ {  # 匹配任何以 /images/jpg/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。 root images/jpg/ ;}#正则匹配location ~*.(gif|jpg|jpeg)$ {       #所有静态文件直接读取硬盘root pic ;#expires定义用户浏览器缓存的时间为3天,如果静态页面不常更新,可以设置更长,这样可以节省带宽和缓解服务器的压力expires 3d; #缓存3天}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;} }
}

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

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

相关文章

Spring Boot异常处理和单元测试

1.SpringBoot异常处理 1.1.自定义错误页面 SpringBoot默认的处理异常的机制&#xff1a;SpringBoot 默认的已经提供了一套处理异常的机制。一旦程序中出现了异常 SpringBoot 会向/error 的 url 发送请求。在 springBoot 中提供了一个叫 BasicErrorController 来处理/error 请…

[C++]类和对象,explicit,static,友元,构造函数——喵喵要吃C嘎嘎4

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;大大会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

数据中台开源技术栈:一图看懂全面的数据管理与应用架构

随着数字化时代的到来&#xff0c;数据管理和应用架构变得越来越重要。数据平台作为一个集中管理和利用数据的架构&#xff0c;为组织提供了促进数据驱动决策和业务创新的能力。本文通过一幅图表&#xff0c;将数据平台技术栈的组成部分清晰呈现&#xff0c;助您深入了解数据中…

在NAT模式下,局域网内的其他电脑要访问使用NAT模式的虚拟机或设备

在NAT模式下&#xff0c;局域网内的其他电脑要访问使用NAT模式的虚拟机或设备 可以通过以下几种方式&#xff1a; 1、端口映射&#xff1a;在NAT模式下&#xff0c;你可以配置端口映射&#xff0c;类似于Docker中的端口映射。这样&#xff0c;局域网内的其他电脑就可以通过特…

【机器学习】详解正则化思想

我们的生活当中真正有意义或者有价值的部分可以概括为两句话&#xff1a;一句话是&#xff1a;弄清楚某个东西是怎么一回事&#xff0c;另一句话是&#xff0c;弄清楚某个东西是怎么一回事。头一句话&#xff0c;我们弄清楚的那个东西对于我们而言是未知的&#xff0c;但是已经…

【CSS】简单的抽屉面板展开收起自然过渡效果的css

目录 效果展示css固定梯形按钮至抽屉面板中间梯形按钮css过渡动画 效果展示 1.收起时点击蓝色梯形按钮展开 2. 展开时点击蓝色按钮收起 3.展开收起时需要过渡自然&#xff0c;有抽屉推拉效果 css 固定梯形按钮至抽屉面板中间 .toggle{ position: absolute;left:-21px;top…

能换发型的相机app有哪些?5款APP帮你一键换发型

能换发型的相机app有哪些&#xff1f;在当前的数字化时代&#xff0c;发型变换不再受限于传统理发店的繁琐流程。只需一款合适的相机app&#xff0c;便能轻松尝试各种新颖发型。这些app凭借先进的图像处理技术&#xff0c;将发型与用户的照片精准融合&#xff0c;实现逼真的换发…

“空气清新剂”成网红!6.29美金,单周热销近5万单!

草莽时期的“造富神话”或许不再&#xff0c;但TikTok电商仍然生机勃勃&#xff0c;新的爆款、新的营销还在出现。 鉴于美国汽车保有量的增长&#xff0c;车内装饰和汽车用品的需求也相应上升&#xff0c;而TikTok在这一趋势中扮演着至关重要的引导角色&#xff0c;越来越多[汽…

HUAWEI Pocket 2说的防晒检测,能做到什么程度?

防晒是必须&#xff0c;还是噱头&#xff1f;我们来看一下经典案例&#xff1a; 《新英格兰医学杂志》调查一名69岁的卡车司机发现&#xff0c;他位于车窗侧、遭受更多阳光直晒的左半边脸&#xff0c;无论是皱纹还是皮肤厚度&#xff0c;都要比远离阳光的右半边脸要严重得多&am…

【数据结构】栈和队列的应用——括号匹配 + 表达式求值 + 表达式转换 +栈的递归应用+队列在计算机系统中的应用

文章目录 3.栈的应用3.1 括号匹配问题3.2 表达式求值3.2.1 三种算术表达式3.2.2 后缀表达式A.中缀转后缀B.后缀表达式的计算 3.2.3 前缀表达式A.中缀转前缀B.前缀表达式的计算 3.2.4 中缀表达式的求值 3.3 递归中栈的应用 4.队列的应用 栈基础知识&#xff1a;【数据结构】栈 顺…

图机器学习(3)-连接层面的特征工程

0 问题定义 通过已经连接去猜未知连接&#xff1a; 有两个思路&#xff1a;

CentOS下安装RabbitMQ

准备工作&#xff0c;更新yum源 正式环境慎用 yum update -y # 进入目录 cd /etc/yum.repos.d/ # 创建目录 mkdir backup # 默认源配备份 mv C* backup/ # 下载阿里云yum源 wget -O /etc/yum.repos.d/CenOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # 清除旧…

【操作系统概念】 第7章:死锁

文章目录 0.前言7.1 系统模型7.2 死锁特征7.2.1 必要条件7.2.2 资源分配图 7.3 死锁处理方法7.4 死锁预防&#xff08;deadlock prevention&#xff09;7.4.1 互斥7.4.2 占有并等待7.4.3 非抢占7.4.4 循环等待 7.5 死锁避免&#xff08;deadlock-avoidance&#xff09;7.5.1 安…

docker离线搭建仓库

要在Docker中搭建本地仓库&#xff0c;可以按照以下步骤进行操作&#xff1a; 首先安装 Docker。根据不同的操作系统选择合适的版本并完成安装过程。打开命令行工具&#xff08;如Terminal或PowerShell&#xff09;&#xff0c;运行以下命令来创建一个新的容器并将其设置为本地…

牛客网 华为机试 坐标移动

本题是需要将输入的字符串&#xff0c;得到移动位置的信息&#xff0c;同时要判断移动信息的合法性。 所以我们可以考虑先通过正则表达式过滤得到正确的字符串。 正确的字符串应该以ADWS其中一个字母开头&#xff0c;然后后面接着1个或者2个&#xff08;0-9&#xff09;的数字。…

如何在小程序中绑定身份证

在小程序中绑定身份证信息是一项常见的需求&#xff0c;特别是在需要进行实名认证或者身份验证的场景下。通过绑定身份证信息&#xff0c;可以提高用户身份的真实性和安全性&#xff0c;同时也为小程序提供了更多的个性化服务和功能。下面就介绍一下怎么在小程序中绑定居民身份…

LVGL在VScode中安装模拟器运行配置笔记教程

1、LVGL模拟器工程搭建 LVGL(Light and Versatile Graphics Library,轻巧而多功能的图形库)是一个免费的开放源代码图形库,它提供创建具有易于使用的图形元素,精美的视觉效果和低内存占用的嵌入式GUI所需的一切。本文主要讲述如何实现在VScode中实现LVGL模拟器环境的搭建运行。…

element组件使用教程

首先在终端输入 npm i element-ui -S 下载完成后如何使用呢 在main.js文件中导入组件以及需要使用 import Vue from vue import { Button, Form, FormItem, Input, Message, Container, Header, Aside, Main, Menu, Submenu, MenuItem, MenuItemGroup } from element-uiVue.…

如何学习、上手点云算法(三):用VsCode、Visual Studio来debug基于PCL、Open3D的代码

写在前面 本文内容 以PCL 1.14.0&#xff0c;Open3D0.14.1为例&#xff0c;对基于PCL、Open3D开发的代码进行源码debug&#xff1b; 如何学习、上手点云算法系列&#xff1a; 如何学习、上手点云算法(一)&#xff1a;点云基础 如何学习、上手点云算法(二)&#xff1a;点云处理相…

Java项目:41 springboot大学生入学审核系统的设计与实现010

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本大学生入学审核系统管理员和学生。 管理员功能有个人中心&#xff0c;学生管理&#xff0c;学籍信息管理&#xff0c;入学办理管理等。 学…