目录
1.1 Nginx的简介
1.2 Apache与Nginx的区别
Nginx对比Apache的优势:
1.3 Nginx的进程
Nginx的两个进程:
同步,异步,阻塞,非阻塞的概念补充
阻塞与非阻塞
同步和异步
2.1 编译安装Nginx
2.1 .1 关闭防火墙,将安装nginx所需软件包传到/opt目录下
2.2 安装依赖包
2.3 创建运行用户与组
2.4 编译安装Nginx
2.5 检查、启动、重启、停止 nginx服务
2.7新版本升级:
2.8 添加 Nginx 系统服务
3.0 nginx平滑升级
前言
3.1、准备工作
3.2、make编译
3.3、平滑升级
1.1 Nginx的简介
Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。
对HTTP并发连接的处理能力高,单台物理服务器可支持30000~50000个并发请求。(实际操作,很多公司为了服务器的稳定,都会设置在20000个左右
Nginx的主要使用场景: 虚拟主机,反向代理,缓存,http
Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适用于多处理器环境,因此,在一个apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。
1.2 Apache与Nginx的区别
Nginx对比Apache的优势:
- 轻量级,nginx比apache 占用更少的内存及资源;
- 静态处理,Nginx 静态处理性能比 Apache 高 ;
- Nginx可以实现无缓存的反向代理加速,提高网站运行速度;
- Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于硬件;
- Nginx支持热部署,启动速度迅速,可以在不间断服务的情况下,对软件版本或者配置进行升级;
- nginx是异步进程,多个连接可以对应一个进程 ;apache是同步多进程,一个连接对应一个进程;
- Nginx高度模块化,编写模块相对简单,且组件比Apache少
- 高并发下nginx 能保持低资源低消耗高性能;
- Nginx 配置简洁, Apache配置复杂
apache相对于nginx的优点 :
- Rewrite比nginx的rewrite强大 (rewrite的主要功能就是实现统一资源定位符URL的跳转)
- 模块多,基本想到的都可以找到
- 少bug, nginx的bug相对较多
- 超稳定
- Nginx处理动态请求是弱项,动态请求要Apache去做。
1.3 Nginx的进程
Apache和Nginx的默认端口都是80,当你发先Nginx启动失败,导致的原因可能就是80端口被占用,而导致服务启动失败,可以修改服务的端口,从而实现两个服务的同时进行。
Nginx的两个进程:
master process:主进程(守护进程),用来管理工作进程。
worker process:工作进程,用来处理用户的请求。
同步,异步,阻塞,非阻塞的概念补充
阻塞与非阻塞
阻塞:阻塞调用是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务,函数只有在得到结果之后才会返回。
非阻塞:非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
同步和异步
同步:一个服务的完成需要依赖其他服务时,只有等待被依赖的服务完成后,才算完成,这是一种可靠的服务序列。要么成功都成功,失败都失败,服务的状态可以保持一致
异步:一个服务的完成需要依赖其他服务时,只通知其他依赖服务开始执行,而不需要等待被依赖的服务完成,此时该服务就算完成了。被依赖的服务是否最终完成无法确定,因此它是一个不可靠的服务序列。
2.1 编译安装Nginx
2.1 .1 关闭防火墙,将安装nginx所需软件包传到/opt目录下
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
安装
2.2 安装依赖包
#nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。
yum -y install pcre-devel zlib-devel gcc gcc-c++ make
2.3 创建运行用户与组
#创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
useradd -M -s /sbin/nologin nginx
2.4 编译安装Nginx
- cd /opt ##切换到opt目录下进行操作
- tar zxvf nginx-1.12.2.tar.gz -C /opt/
- cd nginx-1.12.2/
- ./configure \
- --prefix=/usr/local/nginx \ #指定nginx的安装路径
- --user=nginx \ #指定用户名
- --group=nginx \ #指定组名
- --with-http_stub_status_module #启用 http_stub_status_module 模块以支持状态统计操作 VTS
- ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统识别nginx的操作命令
2.5 检查、启动、重启、停止 nginx服务
- nginx -t #检查配置文件是否配置正确
- #启动 nginx
- 扩展
- #停止
- cat /usr/local/nginx/logs/nginx.pid #先查看nginx的PID号
- kill -3 <PID号>
- kill -s QUIT <PID号>
- killall -3 nginx ##等进程结束后再杀死进程
- killall -s QUIT nginx
- #重载
- kill -1 <PID号>
- kill -s HUP <PID号>
- killall -1 nginx
- killall -s HUP nginx
- #日志分割,重新打开日志文件
- kill -USR1 <PID号>
- #平滑升级
- kill -USR2 <PID号>
2.7新版本升级:
- tar -zxvf nginx-1.22.0.tar.gz 1.22.0
- cd nginx-1.22.0
- yum -y install pcre-devel zlib zlib-devel openssl openssl-devel ##装依赖包
- ./configure \
- --prefix=/usr/local/nginx \
- --user=nginx \
- --group=nginx \
- --with-http_stub_status_module \
- --with-http_ssl_module
- make ##编译
- mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old 备份
- cp objs/nginx /usr/local/nginx/sbin/nginx
- 重启服务 并且
- nginx -V #查看版本
- 扩展:
- make upgrade ##升级的第二种方法
- #或者先 killall nginx ,再/usr/local/nginx/sbin/nginx
2.8 添加 Nginx 系统服务
方法一: service 系统管理
- vim /etc/init.d/nginx
- #!/bin/bash
- #chkconfig: 35 99 20 // 这是固定格式,2345表示运行级别,之后为开机执行顺序和关机执行顺序
- #description:Nginx Service Control Script //这也是必须的
- COM="/usr/local/nginx/sbin/nginx"
- PID="/usr/local/nginx/logs/nginx.pid"
- case "$1" in
- start)
- $COM
- ;;
- stop)
- kill -s QUIT $(cat $PID)
- ;;
- restart)
- $0 stop
- $0 start
- ;;
- reload)
- kill -s HUP $(cat $PID)
- ;;
- *)
- echo "Usage: $0 {start|stop|restart|reload}"
- exit 1
- esac
- exit 0
- chmod +x /etc/init.d/nginx
- chkconfig --add nginx #添加为系统服务
- systemctl stop nginx
- systemctl start nginx
service nginx start|stop|restart|reload
3.0 nginx平滑升级
前言
在工作当中时常会遇到一些软件升级的需求,这次主要是记录使用nginx进行平滑升级(在不关闭nginx服务情况下)
需求将已安装的nginx-1.6.3升级为nginx-1.20.2
3.1、准备工作
下载需要更新的nginx版本,解压到opt目录下
# tar -zxvf nginx-1.20.2.tar.gz -C /opt/
3.2、make编译
- # 进入解压目录
- cd ./nginx-1.20.2
- # 进行配置(因为之前已经指定了用户、组、路径等信息,所以这次直接执行就ok)
- ./configure
- # 进行编译
- make
- # 编译完成后可以看到一个objs文件夹,进入到objs文件夹,里面有个nginx二进制文件
- cd ./objs
3.3、平滑升级
- 备份安装目录下的nginx
- cd /usr/local/nginx/sbin
- mv nginx nginx.bak
- 复制objs目录下的nginx到当前sbin目录下
- cp /opt/software/nginx/nginx-1.20.2/objs/nginx /usr/local/nginx/sbin/
- 查看进程pid号
- ps -elf |grep "nginx"
- 平滑升级19118进程
- kill -USR2 19118
- 快速关闭19118进程
- kill -QUIT 19118
- 查看最新版本号
- ./nginx -v