目录
[1 Nginx概述](#1 Nginx概述)
[1.1 Nginx模块与作用](#1.1 Nginx模块与作用)
[1.2 Nginx三大作用(反向代理、负载均衡、动静分离)](#1.2 Nginx三大作用(反向代理、负载均衡、动静分离))
[2 Nginx和Apache对比](#2 Nginx和Apache对比)
[2.1 Nginx和Apache的差异](#2.1 Nginx和Apache的差异)
[3 安装及使用Nginx](#3 安装及使用Nginx)
[3.1 编译安装nginx](#3.1 编译安装nginx)
[3.2 启动停止nginx](#3.2 启动停止nginx)
[3.3 创建Nginx 自启动文件](#3.3 创建Nginx 自启动文件)
[4 平滑升级及信号使用](#4 平滑升级及信号使用)
[4.1 信号](#4.1 信号)
[4.1.1 显示版本](#4.1.1 显示版本)
[4.1.2显示编译详细情况 模块等信息](#4.1.2显示编译详细情况 模块等信息)
[4.1.4 指定配置 不已配置文件中的为准](#4.1.4 指定配置 不已配置文件中的为准)
[4.1.5 检查语法格式](#4.1.5 检查语法格式)
[4.2升级 nginx1.18 nginx1.20](#4.2升级 nginx1.18 nginx1.20)
1 Nginx概述
- 一款高新能、轻量级Web服务软件
- 稳定性高
- 系统资源消耗低
- 对HTTP并发连接的处理能力高
- 单台物理服务器可支持30 000~50 000个并发请求。
1.1 Nginx模块与作用
**main模块:**全局配置模块,所有模块都要执行遵守
配置运行nginx服务器的用户(组)、worker_process数(进程)、nginx进程PID存放路径、错误日志存放路径、配置文件的引入等
**stream服务模块:**实现反向代理功能,包括TCP协议代理邮件服务模块:主要用于支持 Nginx 的邮件服务
对 POP3 协议、 IMAP 协议和 SMTP协议的支持
**第三方模块:**二次开发,为了扩展 Nginx 服务器应用,完成开发者自定义功能Json 支持、 Lua 支持等
events模块:影响nginx服务器与用户的网络连接
events { #events模块设置
woker_connections 65536; #设置单个工作进程最大并发连接数
use epoll; #事件驱动类型选择为epoll
accept_mutex on; #同一时刻一个请求轮流由work进程除了,即轮询
multi_accept on; #每个工作进程同时接受多个网络连接
}
**http模块:**跟web服务相关,主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,包含几个子模块自定义服务日志、允许sendfile方式传输文件、连接超时时间、单连接请求数上限、Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等
location模块:uri网址定位
server模块:服务模块
配置80端口监听、虚拟主机、DNS域名解析等
auth_basic模块:对网页设置用户名密码
gzip模块:压缩
proxy模块:设置后端IP地址、端口号及http和加密的https
ssl模块:https加密
1.2 Nginx三大作用(反向代理、负载均衡、动静分离)
**1. 反向代理:**在服务端 配置,客户端 访问服务器A ,服务器A 为代理服务器 ,将客户服务再转发到服务器B
**作用:**缓存,将服务器的响应缓存在自己的内存中,减少服务器压力;
负载均衡,将用户请求分配给多个服务器;
访问控制
正向代理:在客户端 配置,配置完了再去访问具体服务,即代理服务器 代理了客户端 ,再去和目标服务器 进行交互
作用:提高访问速度
隐藏客户端真实IP地址
**2. 负载均衡:**分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务
nginx七层负载均衡调度算法(六种)
①询(默认调度算法)
特点:每个请求按时间顺序逐一分配到不同的后端服务器处理。
适用业务场景:后端服务器硬件性能配置完全一致,业务无特殊要求时使用。
upstream backendserver {
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}
②加权轮询
特点:指定轮询几率,weight值(权重)和访问比例成正比,用户请求按权重比例分配。
适用业务场景:用于后端服务器硬件性处理能力不平均的情形。
upstream backendserver {
server 192.168.0.14:80 weight=5 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 weight=10 max_fails=2 fail_timeout=10s;
}
③ip_hash(IP哈希)
特点:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session会话保持问题。
适用业务场景:适用于需要账号登录的系统,会话连接保持的业务。
upstream backendserver {
ip_hash;
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}
④最少连接数 least_conn
特点:按nginx反向代理与后端服务器之间的连接数,连接数最少的优先分配。
适用业务场景:适用于客户端与后端服务器需要保持长连接的业务。
upstream backendserver {
least_conn; server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}
⑤响应时间 fair(需编译安装第三方模块 ngx_http_upstream_fair_module)
特点:按后端服务器的响应时间来分配请求,响应时间短的优先分配。
适用业务场景:对访问响应速度有一定要求的业务。
upstream backendserver {
fair;
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
}
⑥url_hash(URL分配 )(需编译安装第三方模块 ngx_http_upstream_hash_module)
特点:按访问url的hash结果来分配请求,使同一个url访问到同一个后端服务器。
适用业务场景:适用于后端服务器为缓存服务器时比较有效。
upstream backendserver {
server 192.168.0.14:80 max_fails=2 fail_timeout=10s;
server 192.168.0.15:80 max_fails=2 fail_timeout=10s;
hash $request_uri;
}
**3. 动静分离:**采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项针对PHP的动静分离:静态页面交给Nginx处理,动态页面交给PHP-FPM模块或Apache处理。
在Nginx的配置中,是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式,通过使用Nginx提高网站的响应速度,优化用户体验
2 Nginx和Apache对比
2.1 Nginx和Apache的差异
Apache: 同步多进程模型:一个连接对应一个进程(高稳定)
- rewrite更强大(rewrite主要功能是实现统一资源定位符URL的跳转)
- 模块多,基本想到的都可以找到
- 少bug,更加稳定(nginx相对较多)
- PHP支持比较简单(nginx需要配合其他后端用)
- 处理动态请求更有优势(nginx更适合静态与反向)
Nginx: 异步非阻塞模型:多个连接(万级别)对应一个进程(高性能)
- 轻量级,采用C编写,占用更少的内存与资源
- 抗并发/高并发,以epoll and kqueue 作为开发模型,负载能力高,高并发下能够保持低资源低消耗高性能(apache在PHP处理慢或前端压力很大时,容易出现进程数飙升从而拒绝服务)
- 处理静态文件好,静态处理性能比apache高三倍以上
- 设计高度模块化,编写模块相对简单
- .配置简洁,正则配置更简单,且更改完可以使用 -t 测试(apache配置复杂,重启时发现出错,会很崩溃)
- 作为负载均衡服务器,支持七层负载均衡,可以有效防止ddos攻击
- 本身是一个反向代理服务器,也可以作为邮件代理服务器使用
- 支持热部署,支持在线升级
2.2Nginx和Apache的优缺点比较
nginx相对于apache的优点∶
- 轻量级,同样起web服务,比Apache占用更少的内存及资源。
- 高并发,Nginx处理请求是异步非阻塞的,而Apache是阻塞型的在高并发下,Nginx能保持低资源低消耗高性能。
- 高度模块化的设计。
- 编写模块相对简。
- 社区活跃,各种高性能模块出品速度
apache相对于nginx的优点∶
- 3rewrite比nginx的rewrite强大
- 模块多,基本想到的都可以找到
- 少bug, Nginx的bug相对较超稳定
- 存在就是理由,一般来说,需要性能的web服务,用Nginx。如果不需要性能只求稳定,那就Apache。Nginx处理动态请求是弱项,一般动态请求要Apache去做,Nginx只适处理静态网页或反向代理。
3 安装及使用Nginx
3.1 编译安装nginx
安装依赖包
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
#安装依赖包
新建nginx用户便于管理
useradd -M -s /sbin/nologin nginx
下载安装包
解压安装包
./configure --help
#查看帮助模块
./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
make install
安装好后生成四个文件功能如下
conf:保存nginx所有的配置文件,其中nginx.conf是nginx服务器的最核心最主要的配置文件,其他的.conf则是用来配置nginx相关的功能的,例如fastcgi功能使用的是fastcgi.conf和fastcgi_params两个文件,配置文件一般都有个样板配置文件,是文件名.default结尾,使用的使用将其复制为并将default去掉即可。
html目录中保存了nginx服务器的web文件,但是可以更改为其他目录保存web文件,另外还有一个50x的web文件是默认的错误页面提示页面。
logs:用来保存nginx服务器的访问日志错误日志等日志,logs目录可以放在其他路径,比如/var/logs/nginx里面。
sbin:保存nginx二进制启动脚本,可以接受不同的参数以实现不同的功能。
修改权限
chown -R nginx.nginx /apps/nginx
3.2 启动停止nginx
启动
/apps/nginx/sbin/nginx ##绝对路径启动
ps : ln -s /apps/nginx/sbin/nginx /usr/sbin/ ##创建软连接后直接 nginx启动
停止
killall nginx ##停止nginx服务
3.3 创建Nginx 自启动文件
建立文件
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/apps/nginx/logs/nginx.pid
#注意文件位置,如果不对 启动不了
ExecStart=/apps/nginx/sbin/nginx -c /apps/nginx/conf/nginx.conf
#注意启动文件位置
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
如果需要修改pid文件可以执行以下操作
#创建目录
vim /apps/nginx/conf/nginx.conf
#修改配置文件
pid /apps/nginx/run/nginx.pid;
#找到 pid的位置修改
重新加载配置
systemctl daemon-reload
开机自启并立即启动
如果卡主是应为logs下有 nginx.pid 文件 删除即可
systemctl enable --now nginx
4 平滑升级及信号使用
4.1 信号
nginx 命令支持向其发送信号,实现不同功能
nginx 当做单独命令使用有以下选项
4.1.1 显示版本
nginx -v (小写)
4.1.2显示编译详细情况 模块等信息
nginx -V (大写)
4.1.3发送信号
kill -l 看信号大全
nginx -h 中可以看到的信号较少
nginx -s stop #立即关闭nginx
nginx -s quit #优雅退出 不影响业务的状态下退出
nginx -s reload #重新加载
4.1.4 指定配置 不已配置文件中的为准
nginx -g 指定配置 不已配置文件中的为准
nginx -g 'cyw;' 已张三身份运行,默认是以nginx身份
nginx -g 'daemon off;' 前台运行命令
4.1.5 检查语法格式
nginx -t
4.2升级 nginx1.18 nginx1.20
将旧Nginx文件换成新Nginx文件(注意备份)
向master进程发送USR2信号
master进程修改pid文件名,加后缀.oldbin
master进程用新Nginx文件启动新master进程,系统中将有新旧两个Nginx主进程共同提供Web服务
向旧的Nginx服务进程发送WINCH信号,使旧的Nginx worker进程平滑停止,并删除Nginx.pid.oldbin文件
向旧master进程发送QUIT信号,关闭老master
如果发现升级有问题,可以回滚向老master发送HUP,向新master发送QUIT
重新加载配置文件
wget https://nginx.org/download/nginx-1.20.2.tar.gz -P /usr/local/src/
#下载安装包到src目录
解压并重新编译安装
如果有新模块在后添加即可
添加新模块
./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 install
查看