目录
1 Nginx概述
1.1 Nginx模块与作用
1.2 Nginx三大作用(反向代理、负载均衡、动静分离)
2 Nginx和Apache对比
2.1 Nginx和Apache的差异
2.2Nginx和Apache的优缺点比较
3 安装及使用Nginx
3.1 编译安装nginx
3.2 启动停止nginx
3.3 创建Nginx 自启动文件
4 平滑升级及信号使用
4.1 信号
4.1.1 显示版本
4.1.2显示编译详细情况 模块等信息
4.1.3发送信号
4.1.4 指定配置 不已配置文件中的为准
4.1.5 检查语法格式
4.2升级 nginx1.18 nginx1.20
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. 反向代理:在服务端 配置,客户端 访问服务器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提高网站的响应速度,优化用户体验
Apache: 同步多进程模型:一个连接对应一个进程(高稳定)
Nginx: 异步非阻塞模型:多个连接(万级别)对应一个进程(高性能)
nginx相对于apache的优点∶
apache相对于nginx的优点∶
安装依赖包
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
#安装依赖包
新建nginx用户便于管理
useradd -M -s /sbin/nologin nginx
下载安装包
wget http://nginx.org/download/nginx-1.18.0.tar.gz
解压安装包
./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
启动
/apps/nginx/sbin/nginx ##绝对路径启动
ps : ln -s /apps/nginx/sbin/nginx /usr/sbin/ ##创建软连接后直接 nginx启动
停止
killall nginx ##停止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
nginx 命令支持向其发送信号,实现不同功能
nginx 当做单独命令使用有以下选项
nginx -V (大写)
kill -l 看信号大全
nginx -h 中可以看到的信号较少
nginx -s stop #立即关闭nginx
nginx -s quit #优雅退出 不影响业务的状态下退出
nginx -s reload #重新加载
nginx -g 指定配置 不已配置文件中的为准
nginx -g 'cyw;' 已张三身份运行,默认是以nginx身份
nginx -g 'daemon off;' 前台运行命令
nginx -t
将旧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