重大发现!看Apache与nginx工作模型,享web服务幸福人生

文章相关连接如下:

Web 服务基础介绍

Apache

Apache prefork 模型

  • 预派生模式,有一个主控制进程,然后生成多个子进程,使用select模型,最大并发1024
  • 每个子进程有一个独立的线程响应用户请求
  • 相对比较占用内存,但是比较稳定,进程之间不会有影响,可以设置最大和最小进程数
  • 是最古老的一种模式,也是最稳定的模式,适用于访问量不是很大的场景
    在这里插入图片描述

优点:稳定

缺点:每个用户请求需要对应开启一个进程,占用资源较多,并发性差,不适用于高并发场景

Apache worker 模型

  1. 一种多进程多线程混合的模型
  2. 一个控制进程,启动多个子进程
  3. 每个子进程里面包含固定的线程
  4. 使用线程处理请求
  5. 当线程不够使用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理请求,
  6. 由于其使用了线程处理请求,因此可以承受更高的并发
    在这里插入图片描述

优点:相比prefork 占用的内存较少,可以同时处理更多的请求

缺点:使用keepalive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用(该问题在prefork模式下,同样会发生)

Apache event模型

  • Apache中最新的模式,2012年发布的apache 2.4.X系列正式支持event 模型,属于事件驱动模型(epoll)
  • 每个进程响应多个请求,在现在版本里的已经是稳定可用的模式
  • 它和worker模式很像,最大的区别在于,它解决了keepalive场景下长期被占用的线程的资源浪费问题(某些线程因为被keepalive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)
  • event MPM中,会有一个专门的线程来管理这些keepalive类型的线程
  • 当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场
    景下的请求处理能力
    在这里插入图片描述

优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keepalive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放

缺点:没有线程安全控制

Nginx-高性能的 Web 服务端

Nginx的工作场景:
在这里插入图片描述

nginx源码安装

#官方源码包下载地址
https://nginx.org/en/download.html

准备编译环境:


[root@server9 ~]# dnf install gcc pcre-devel zlib-devel openssl-devel -y
[root@server9 ~]# cd nginx-1.24.0/
[root@server9 nginx-1.24.0]#useradd -s /sbin/nologin -M nginx
[root@server9 nginx-1.24.0]# ls
[root@server9 nginx-1.24.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module

在这里插入图片描述
检测没问题后,开始安装
在这里插入图片描述

[root@server9 nginx-1.24.0]# make && make install

nginx完成安装以后,有四个主要的目录
在这里插入图片描述
验证版本及编译参数

[root@server9 nginx-1.24.0]# vim ~/.bash_profile
[root@server9 nginx-1.24.0]# source ~/.bash_profile
[root@server9 nginx-1.24.0]# nginx -v

本地环境变量
在这里插入图片描述
在这里插入图片描述

启动nginx验证:

[root@server9 nginx-1.24.0]# nginx
[root@server9 nginx-1.24.0]# curl 172.25.254.100

在这里插入图片描述
在这里插入图片描述

[root@server9 local]# ps aux | grep nginx

在这里插入图片描述

平滑升级和回滚

平滑升级:

有时候我们需要对Nginx版本进行升级以满足对其功能的需求,例如添加新模块,需要新功能,而此时Nginx又在跑着业务无法停掉,这时我们就可能选择平滑升级

平滑升级流程:
在这里插入图片描述

平滑升级步骤:

[root@server9 ~]# tar zxf nginx-1.26.1.tar.gz
[root@server9 ~]# cd nginx-1.26.1/
# 编译新版本
[root@server9 nginx-1.26.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --add-module=/root/echo-nginx-module-0.63  --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module

在这里插入图片描述
在这里插入图片描述

只要make无需要make install
在这里插入图片描述

[root@server9 nginx-1.26.1]# make

查看两个nginx版本

[root@server9 nginx-1.26.1]# ll objs/nginx /usr/local/nginx/sbin/nginx

在这里插入图片描述

把之前的旧版的nginx命令备份

[root@server9 ~]# cd /usr/local/nginx/sbin/
[root@Nginx sbin]# cp nginx nginx.24

把新版本的nginx命令复制过去

[root@Nginx sbin]# \cp -f /root/nginx/nginx-1.26.1/objs/nginx  /usr/local/nginx/sbin

检测

[root@Nginx sbin]# nginx -t

在这里插入图片描述
查看版本依然是旧版本生效
在这里插入图片描述

回收旧版本

[root@server9 sbin]# kill -WINCH 36838
[root@server9 sbin]# ps aux |grep nginx
[root@Nginx sbin]# curl -I localhost

在这里插入图片描述
在这里插入图片描述

回滚步骤

如果升级的版本发现问题需要回滚,可以重新拉起旧版本的worker

#先备份
[root@Nginx sbin]# cp nginx nginx.26
[root@Nginx sbin]# ls
[root@Nginx sbin]# mv nginx.24 nginx
[root@Nginx sbin]# kill -HUP 20896
[root@Nginx sbin]# kill -WINCH 24242
[root@Nginx sbin]# curl -I localhost

在这里插入图片描述

在这里插入图片描述

nginx启动文件

[root@Nginx logs]# vim /lib/systemd/system/nginx.service
[root@Nginx logs]# systemctl daemon-reload 
[root@Nginx logs]# systemctl start nginx.service

在这里插入图片描述

[root@Nginx ~]# vim /usr/local/nginx/conf/nginx.conf
[root@Nginx ~]# mkdir -p /usr/local/nginx/conf.d
[root@Nginx ~]# vim /usr/local/nginx/conf.d/vhost.conf
[root@Nginx ~]# systemctl restart nginx.service

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值