编辑
2024-03-15
web
00
请注意,本文编写于 252 天前,最后修改于 251 天前,其中某些信息可能已经过时。

目录

底层原理
反向代理
负载均衡
四层负载和七层负载
负载均衡的方式
动静分离
nginx和apache的区别
nginx调优
Nginx虚拟主机:

底层原理

相关信息

nginx通过生成一个master进程和多个worker进程,master进程主要负责收集、分发请求。worker采用争抢式机制,即当客户端请求时,空闲的worker会去争抢请求,当其中一个worker抢到请求时,会去根据需求处理,其他worker也会进入待命模式等待请求。


性能为什么高

他的事件处理机制是异步非阻塞事件处理


反向代理

image-20240315164019544


正向代理: 我们平时需要访问国外的浏览器是不是很慢,比如我们要看推特,看GitHub等等。我们直接用国内的服务器无法访问国外的服务器,或者是访问很慢。所以我们需要在本地搭建一个服务器来帮助我们去访问。那这种就是正向代理。(浏览器中配置代理服务器


反向代理

我们只需要去访问代理服务器,代理服务器会去转发目标服务器的内容,此时代理服务器和目标服务器对外就是一个服务器。隐藏了真实服务器的IP地址,对外暴露的是代理服务器的地址


负载均衡

网站小的时候基本不会出现什么问题,但当网站请求流量很大时。例如淘宝、京东的访问流量一天可能是上千万次的。怎么才能在如此大流量的情况下让服务器不崩溃。就是负载均衡

例如,当马车拉货物的时候,货物很重,这时候一匹马可能拉不动货车。此时要么把马换成更大更强壮的马,也就对应这给服务器增添配置,加内存升级cpu等。但这个方法成本很高。所以可以采用多匹马来拉货车,也就是服务器负载均衡的概念。


四层负载和七层负载

nginx默认支持7层,想要支持4层负载均衡需要安装stream模块

四层负载是基于端口+IP地址的方式实现;

七层负载是基于URL等应用层信息实现;

二层负载是基于Mac地址实现;

三层负载是基于IP地址实现


区别

  1. 七层负载均衡基本都是基于http协议的,适用于web服务器的负载均衡。

  2. 四层负载均衡主要是基于tcp协议报文,可以做任何基于tcp/ip协议的软件的负载均衡。(haproxy、LVS)

  3. 四层负载与七层负载最大的区别就是效率与功能的区别。四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会相对比较高,而七层负载均衡的优势则体现在功能多,控制灵活强大。在具体业务架构设计时,使用七层负载或者四层负载还得根据具体的情况综合考虑


在这里插入图片描述


负载均衡的方式

  1. 轮询

    轮询是nginx负载默认的方式,它将请求按时间的顺序分配到不同的服务器上,如果某个服务器宕机了,还会自动剔除。


    image-20240315170601786


  2. 权重

    指定每个服务器的权重比值,由于有的服务器性能比较好,所以通过设置不同服务器间权重的比例可以发挥服务器的最大性能。


    image-20240315170705690


  3. ip hash

    根据ip经过hash后的结果进行分配,这样每个ip只能固定访问一个服务


    image-20240315170816981


  4. 最小连接

    将请求分配到连接最少的服务上,类似于轮询

动静分离

nginx的静态处理能力很强,但是动态处理能力不足。所以企业会采用nginx的反向代理tomcat(动态处理能力很强)。静态页面交给Nginx处理,动态页面交给Apache处理。


image-20240315171325645


nginx和apache的区别

  1. 轻量级:同样起web 服务,nginx 比apache 占用更少的内存及资源;

  2. 抗并发:nginx处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能;

  3. 模块化:nginx编写模块相对简单;

  4. IO事件模型:apache是同步多进程模型,一个连接对应一个进程,阻塞;nginx是异步的,多进程单线程,异步非阻塞,多个连接(万级别)可以对应一个进程。

  5. 功能丰富:Nginx提供负载均衡,可以做反向代理,前端服务器


nginx调优

  • 隐藏 Nginx 版本号和软件名字【server_tokens off;】

  • 更改 Nginx 服务的默认用户和权限【user 用户】

  • 优化 Nginx worker 进程最大打开文件数

  • 优化连接超时时间 【keepalived_timeout】

  • 开启高效文件传输模式【gzip on】

  • 缓存

  • nginx 事件处理模型【use epoll】

  • nginx的cpu亲和力【worker_cpu_affinity】

  • 文件上传限制大小【gzip_buffers 4 32k;】

  • expire 缓存时间调优

  • 系统连接数

  • 优化工作进程数 worker_processes

  • 优化 Nginx 单个进程允许的最大连接数worker_connections

  • Nginx 防爬虫优化


Nginx虚拟主机:

  1. 基于域名的虚拟主机:通过域名来区分虚拟主机——应用:外部网站

  2. 基于端口的虚拟主机:通过端口来区分虚拟主机——应用:公司内部网站,外部网站的管理后台

  3. 基于ip的虚拟主机:几乎不用。

本文作者:春天y

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!