一、Nginx
1.Nginx的简介
1.一款高新能、轻量级Web服务软件
2.系统资源消耗低
3.对HTTP并发连接的处理能力高
4.单台物理服务器可支持30 000~50 000个并发请求
2.Nginx的模块和作用
main模块:全局配置模块,所有模块都要执行遵守,配置运行nginx服务器的用户(组)、worker_process数(进程)、nginx进程PID存放路径、错误日志存放路径、配置文件的引入等
stream服务模块:实现反向代理功能,包括TCP协议代理
邮件服务模块:主要用于支持Nginx的邮件服务,对POP3协议、IMAP协议和SMTP协议的支持
第三方模块:二次开发,为了扩展Nginx服务器应用,完成开发者自定义功能,Json支持、Lua支持等
events模块:影响nginx服务器与用户的网络连接
http模块:跟web服务相关,主要用于扩展标准的 HTTP 功能,让 Nginx 能处理一些特殊的服务,包含几个子模块,自定义服务日志、允许sendfile方式传输文件、连接超时时间、单连接请求数上限、Flash 多媒体传输 、解析 GeoIP 请求、 网络传输压缩 、 安全协议 SSL 支持等
location模块:uri网址定位
server模块:服务模块,配置80端口监听、虚拟主机、DNS域名解析等
auth_basic模块:对网页设置用户名密码
gzip模块:压缩
proxy模块:设置后端IP地址、端口号及http和加密的https
ssl模块:https加密
3.Nginx三大作用:反向代理、负载均衡、动静分离
反向代理:在服务端配置,客户端访问服务器A,服务器A为代理服务器,将客户服务再转发到服务器B
作用:缓存,将服务器的响应缓存在自己的内存中,减少服务器压力
正向代理:在客户端配置,配置完后再去访问具体服务,即代理服务器代理了客户端再去和目标服务器进行交互
作用:提高访问速度,隐藏客户端真实IP地址
负载均衡:分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其他关键任务服务器等,从而共同完成工作任务
nginx七层负载均衡调度算法
1.轮询(默认调度算法)
特点:每个请求按时间顺序逐一分配到不同的后端服务器处理
适用业务场景:后端服务器硬件性能配置完全一致,业务无特殊要求时使用
2.加权轮询
特点:指定轮询几率,权重(weight值)和访问比例成正比,用户请求按权重比例分配
适用业务场景:用于后端服务器硬件性处理能力不平均的情形
3.ip_hash(IP哈希)
特点:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session会话保持问题
适用业务场景:适用于需要账号登录的系统,会话连接保持的业务
4、最少连接数 least_conn
特点:按nginx反向代理与后端服务器之间的连接数,连接数最少的优先分配。
适用业务场景:适用于客户端与后端服务器需要保持长连接的业务
5、响应时间 fair(需编译安装第三方模块 ngx_http_upstream_fair_module)
特点:按后端服务器的响应时间来分配请求,响应时间短的优先分配。
适用业务场景:对访问响应速度有一定要求的业务6、url_hash(URL分配 )(需编译安装第三方模块 ngx_http_upstream_hash_module)
特点:按访问url的hash结果来分配请求,使同一个url访问到同一个后端服务器。
适用业务场景:适用于后端服务器为缓存服务器时比较有效
动静分离:采用代理的方式,在server{}段中加入带正则匹配的location来指定匹配项针对PHP的动静分离:静态页面交给Nginx处理,动态页面交给PHP-FPM模块或Apache处理。
在Nginx的配置中,是通过location配置段配合正则匹配实现静态与动态页面的不同处理方式,通过使用Nginx提高网站的响应速度,优化用户体验
二、Nginx和Apache的区别
1.Apache(高稳定)
Apache是一个同步多进程模型,一个连接对应一个进程
1.rewrite更强大(rewrite主要功能是实现统一资源定位符URL的跳转)
2.模块多,基本想到的都可以找到
3.少bug,更加稳定(nginx相对较多)
4.PHP支持比较简单(nginx需要配合其他后端用)
5.处理动态请求更有优势(nginx更适合静态与反向)
2.Nginx(高性能)
Nginx是一个异步非阻塞模型:多个连接(万级别)对应一个进程
1.轻量级,采用C编写,占用更少的内存与资源
2.抗并发/高并发,以epoll and kqueue 作为开发模型,负载能力高,高并发下能够保持低资源低消耗高性能(apache在PHP处理慢或前端压力很大时,容易出现进程数飙升从而拒绝服务)
3.处理静态文件好,静态处理性能比apache高三倍以上
4.设计高度模块化,编写模块相对简单
5.配置简洁,正则配置更简单,且更改完可以使用 -t 测试(apache配置复杂,重启时发现出错,会很崩溃)
6.作为负载均衡服务器,支持七层负载均衡,可以有效防止ddos攻击
7.本身是一个反向代理服务器,也可以作为邮件代理服务器使用
8.支持热部署,支持在线升级
三、Nginx安装
1.yum安装
#安装依赖包
yum install -y epel-releas
#yum方式安装
yum install -y nginx
2.编译安装
#安装依赖包
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
3.新建nginx用户
#新建nginx用户便于管理
useradd -M -s /sbin/nologin nginx
4.安装依赖包
cd /opt
官网下载包:wget http://nginx.org/download/nginx-1.18.0.tar.gz
或
tar xf nginx-1.18.0.tar.gz
cd nginx-1.18.0
创建/apps/nginx文件夹
mkdir /apps/nginx -p
5.安装依赖环境、功能模块
./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
6.编译安装
make -j2 && make install
7.给nginx加权限
chown -R nginx.nginx /apps/nginx
8.添加软连接,直接启动不需要绝对路径
ln -s /apps/nginx/sbin/nginx /usr/sbin
9.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
#注意启动文件位置
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
重新加载配置:systemctl daemon-reload
设置开机自启立即启动:systemctl enable --now nginx ##如果卡住是因为logs下有nginx.pid文件删除即可
修改权限:chown -R nginx.nginx /apps/nginx
四、Nginx的信号使用
nginx命令支持向其发送信号,实现不同功能
#查询nginx信号使用规则
nginx -h
信号 | 功能 |
nginx -v | 显示版本 |
nginx -V | 显示编译详细情况、模块等信息 |
nginx -t | 检查语法格式 |
nginx -T | 打印当前配置 |
nginx -s | 发送信号 |
nginx -s stop | 立即关闭 |
nginx -s quit | 无伤害退出,不影响业务的状态下退出 |
nginx -s reload | 重新加载配置文件 |
nginx -s USR1 | 分割日志 |
nginx -s USR2 | 智能升级 |
nginx -g 'user jiujiu;' | 以酒酒身份运行,默认是以nginx身份 |
nginx -g 'daemon off;' | 前台运行命令 |
五、构建虚拟主机
1.基于域名的虚拟主机
#创建子配置文件
vim /apps/nginx/conf/nginx.conf
在34行添加:include /apps/nginx/conf.d/*.conf;
#保存后检查语法
nginx -t
#创建并切换到子配置文件目录
mkdir /apps/nginx/conf.d -p
cd /apps/nginx/conf.d
#编辑配置文件
vim eva.conf
server {
listen 192.168.7.20:80;
server_name www.eva.com;
location / {
root /data/nginx/html/eva;
}
}
server {
listen 192.168.7.20:80;
server_name www.es.com;
location / {
root /data/nginx/html/es;
}
}
#构建数据文件夹
mkdir /data/nginx/html/es -pv
mkdir /data/nginx/html/eva -pv
#构建数据文件
echo eva > /data/nginx/html/eva/index.html
echo es > /data/nginx/html/es/index.html
#刷新nginx
nginx -s reload
#切换到第二台虚拟机(测试)修改本地host文件,添加对应映射
vim /etc/hosts
192.168.7.100 www.eva.com
192.168.7.100 www.es.com
#使用第二台虚拟机curl域名
curl www.eva.com
curl www.es.com
2.基于端口的虚拟主机
IP和域名相同,只用更改root路径和端口号即可,注意刷新nginx
拿第二台虚拟机curl端口号
curl 192.168.7.20:80
curl 192.168.7.20:8080
3.基于IP的虚拟主机
#添加虚拟网卡
ifconfig ens33:0 192.168.7.21/24
#修改配置文件,并检查nginx,刷新nginx
vim /apps/nginx/conf.d/eva.conf
nginx -t
nginx -s reload
#切换到第二台虚拟机(测试)修改本地host文件,添加对应映射
vim /etc/hosts
192.168.7.20 www.eva.com
192.168.7.21 www.es.com
#拿第二台虚拟机curl虚拟主机的IP地址
curl 192.168.7.20
curl 192.168.7.21