Nginx基础

一、Nginx简介

Nginx(发音为“engine X”)是一款高性能、轻量级的开源Web服务器和反向代理服务器。它由俄罗斯的程序员Igor Sysoev于2004年首次发布,并且在后来迅速获得了广泛的认可和采用。Nginx的主要特点包括高并发处理能力、低内存占用、事件驱动的架构、灵活的配置选项以及可扩展性。

以下是一些Nginx的主要特点和用途:

  1. 高性能: Nginx以其高并发处理能力和低内存占用而闻名,适合处理大量的并发请求。它可以在相对较少的硬件资源下处理更多的请求。

  2. 反向代理: Nginx常用作反向代理服务器,将客户端请求转发给后端的应用服务器。这可以提供负载均衡、缓存、SSL终止等功能,帮助提高应用的性能和安全性。

  3. 负载均衡: Nginx可以分配客户端请求到多个后端服务器,实现负载均衡,从而提高服务的可靠性和性能。

  4. 静态文件服务: Nginx可以高效地提供静态文件,如图片、CSS和JavaScript文件。它可以缓存这些文件,减少对后端服务器的请求。

  5. 动态内容处理: 尽管Nginx不像一些应用服务器那样处理动态内容,但它可以通过反向代理将请求转发到应用服务器,实现动态内容的处理。

  6. SSL终止: Nginx可以作为SSL终止代理,处理SSL加密和解密,从而减轻后端服务器的负担。

  7. 虚拟主机: Nginx支持虚拟主机配置,可以在同一台服务器上托管多个域名或站点。

  8. 模块化架构: Nginx的模块化架构使其可以通过加载不同的模块来扩展功能。这使得Nginx适用于各种不同的用例和需求。

二 、Nginx和Apache的差异

NginxApache
nginx是一个基于事件的web服务器apache是一个基于流程的服务器
所有请求都由一个线程处理单个线程处理单个请求
nginx避免子进程的概念apache是基于子进程的
nginx类似于速度apache类似于功率
nginx在内存消耗和连接方面比较好apache在内存消耗和连接上没有提高
nginx在负载均衡方面表现较好当流量到达进程极限时,apache将拒绝新的连接。
nginx不支持IBMI和openvms一样的osapache支持更多的os
nginx只具有核心功能apache提供了比nginx更多的功能
nginx的性能和可伸缩性不依赖于硬件apache依赖于cpu和内存等硬件组件
Nginx支持热部署Apache不支持热部署
  1. 架构:

    • Nginx:采用事件驱动、非阻塞的架构。它使用少量的线程或进程处理大量的并发连接,每个连接都以异步非阻塞方式处理,能够高效地处理大量并发请求。
    • Apache:采用多进程或多线程的传统多路复用架构。每个连接通常会分配一个线程或进程,适合处理少量的连接。
  2. 内存占用:

    • Nginx:因为采用事件驱动、非阻塞的架构,所以内存占用较低,适合处理大量并发连接。
    • Apache:由于多进程或多线程的架构,内存占用相对较高,适用于并发连接较少的情况。
  3. 性能:

    • Nginx:由于事件驱动架构和低内存占用,Nginx在高并发情况下表现出色,特别适合处理静态资源和负载均衡。
    • Apache:在低并发情况下表现良好,但在高并发情况下,由于进程或线程较多,性能可能较差。
  4. 配置:

    • Nginx:配置文件语法简洁、易读,支持模块化配置,通常被认为更易于配置。
    • Apache:配置文件较为复杂,可以通过.htaccess文件实现目录级别的配置,但这可能会影响性能。
  5. 模块:

    • Nginx:支持的模块较少,但内置的模块足够满足大多数需求。
    • Apache:拥有大量的第三方模块,提供了更多的功能扩展。
  6. 适用场景:

    • Nginx:适用于高并发的场景,如静态资源服务、反向代理、负载均衡等。
    • Apache:适用于小规模的Web应用,需要灵活的配置和动态内容处理的场景。
  7. 虚拟主机:

    • Nginx:虚拟主机配置相对简单,可以处理大量的虚拟主机。
    • Apache:虚拟主机配置较为复杂,适用于较小规模的虚拟主机。

2.1 nginx apache 的优缺点

nginx相对于apache的优点∶

  • 轻量级,同样起web服务,比apache占用更少的内存及资源
  • 抗并发,nginx处理请求是异步非阻塞的,而apache是阻塞型的在高并发下,nginx能保持低资源低消耗高性能
  • 高度模块化的设计,编写模块相对简
  • 支持热部署,平滑升级

apache相对于nginx的优点∶

  • Rewrite比nginx的rewrite强大 (rewrite的主要功能就是实现统一资源定位符URL的跳转)
  • 模块多,基本想到的都可以找到
  • 少bug, nginx的bug相对较多
  • 超稳定
  • Nginx处理动态请求是弱项,动态请求要Apache去做。

三、nginx 进程架构

nginx启动时有两个进程:

        Nginx启动时会创建一个Master进程,也称为主进程。Master进程负责管理所有的Worker进程,并处理来自操作系统的信号。它不直接处理客户端请求,而是负责监控和管理其他进程的生命周期。

        Nginx可以配置多个Worker进程,每个Worker进程都是一个独立的执行单元,负责实际的客户端请求处理。每个Worker进程都是独立的,互相之间不会影响。Worker进程使用事件驱动的方式处理连接,允许异步非阻塞地处理多个连接。

主进程(master process)的功能:

        对外接口:接收外部的操作(信号)
        对内转发:根据外部的操作的不同,通过信号管理 Worker
        监控:监控 worker 进程的运行状态,worker 进程异常终止后,自动重启 worker 进程
        读取Nginx 配置文件并验证其有效性和正确性
        建立、绑定和关闭socket连接
        按照配置生成、管理和结束工作进程
        接受外界指令,比如重启、升级及退出服务器等指令
        不中断服务,实现平滑升级,重启服务并应用新的配置
        开启日志文件,获取文件描述符
        不中断服务,实现平滑升级,升级失败进行回滚处理
        编译和处理perl脚本

工作进程(worker process)的功能:

        Worker 进程都是平等的
        实际处理:网络请求,由 Worker 进程处理
        Worker进程数量:一般设置为核心数,充分利用CPU资源,同时避免进程数量过多,导致进程竞争CPU资源,增加上下文切换的损耗
        接受处理客户的请求
        将请求依次送入各个功能模块进行处理
        I/O调用,获取响应数据与后端服务器通信,接收后端服务器的处理结果
缓存数据,访问缓存索引,查询和调用缓存数据
        发送请求结果,响应客户的请求
        接收主程序指令,比如重启、升级和退出等

 四、编译安装nginx

1)安装nginx依赖

yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel

2)新建一个nginx用户便于管理nginx

useradd -M -s /sbin/nologin nginx

3)创建在根目录创建一个文件夹用于存放软件例如/apps 

mkdir /apps

 4)网络下载nginx安装包

wget http://nginx.org/download/nginx-1.18.0.tar.gz

5)解压nginx源码包准备编译安装

tar xf nginx-1.18.0.tar.gz 

6) 编译安装

./configure --prefix=/apps/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
make -j2 && make install

7) 修改文件权限

chown -R nginx.nginx /apps/nginx

8)实现systemd控制nginx 

        (1)创建.service文件

vim /usr/lib/systemd/system/nginx.service

        (2)编写启动项

        

9)启动nginx

systemctl start nginx
systemctl status nginx

 10)浏览器访问服务器ip 192.168.2.101

 五、nginx 平滑升级

5.1 升级流程

  1. 将旧Nginx文件换成新Nginx文件(注意备份)

  2. 向master进程发送USR2信号

  3. master进程修改pid文件名,加后缀.oldbin

  4. master进程用新Nginx文件启动新master进程,系统中将有新旧两个Nginx主进程共同提供Web服务

  5. 向旧的Nginx服务进程发送WINCH信号,使旧的Nginx worker进程平滑停止,并删除Nginx.pid.oldbin文件

  6. 向旧master进程发送QUIT信号,关闭老master

  7. 如果发现升级有问题,可以回滚向老master发送HUP,向新master发送QUIT

5.2 nginx 1.18 升级 1.20

1) 修改配置文件woker进程数

vim /apps/nginx/conf/nginx.conf

读取配置文件

nginx -s reload

ps:如果此命令显示未找到命令请做软连接到$PATH

2) 下载nginx 1.20.2安装包 编译

wget https://nginx.org/download/nginx-1.20.2.tar.gz -P /apps

 解压nginx1.20.2

tar xf nginx-1.20.2.tar.gz

 编译安装需要与之前版本一直

这时候可以

nginx -V

查看配置

 ps:编译时注意不要make install !!!!!!!!!

 3)升级

将老版本nginx 改名为nginx.bak

mv /apps/nginx/sbin/nginx /apps/nginx/sbin/nginx.bak

将编译完成新版本nginx复制进去

mv /apps/nginx-1.20.2/objs/nginx /apps/nginx/sbin/

 

 4)向nginx发送升级信号

kill -USR2 `cat /apps/nginx/logs/nginx.pid`

5) 升级完成优雅退出老nginx

kill -WINCH `cat /apps/nginx/logs/nginx.pid.oldbin`

6)浏览器测试是否升级成功

 

 ps:升级成功测试无bug之后可以kill掉老master进程彻底升级成功

5.3 回滚

1)如果新版本测试有bug需要回滚,可以尝试唤醒老进程

kill -HUP `cat /apps/nginx/logs/nginx.pid.oldbin`

 2)然后杀掉新进程

kill -QUIT `cat /apps/nginx/logs/nginx.pid`

3)将新nginx删除后将老nginx改回来

cd /apps/nginx/sbin
rm -rf nginx
mv nginx.bak nginx

4)浏览器测试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值