文章目录
简介
Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。
- 正向代理
如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
- 反向代理
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
- 负载均衡
单个服务器解决不了的情况下,增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个,服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器
- 动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
Linux中安装Nginx
- 安装 openssl 、zlib 、 gcc 依赖
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
- 安装pcre依赖
#联网下载
wget ftp://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz
#解压
tar -xvf pcre-8.44.tar.gz
#进入解压后目录,执行./configure
[root@localhost pcre-8.44]# ./configure
#编译安装
make && make install
# 安装完成 验证版本
pcre-config --version
- 安装Nginx
# 下载
wget http://nginx.org/download/nginx-1.16.1.tar.gz
# 解压
tar -xvf nginx-1.16.1.tar.gz
# 执行./configure
cd nginx-1.16.1
./configure
#编译安装
make && make install
- 启动Nginx
#进入
cd /usr/local/nginx/sbin
#启动
./nginx
#查看进程
ps -ef | grep nginx
- 查看配置文件,浏览器访问
# 配置文件在nginx/conf/nginx.conf
在浏览器直接输入Linux系统的IP地址访问
如果不能访问,可以关闭防火墙:CentOS7_关闭防火墙,或者设置开放端口号80
#查看开放的端口号
firewall-cmd --list-all
#设置开放的端口号
firewall-cmd --add-service=http –permanent
firewall-cmd --add-port=80/tcp --permanent
#重启防火墙
firewall-cmd –reload
常用命令
#首先必须进入到Nginx目录
cd /usr/local/nginx/sbin
#查看版本号
./nginx -v
#启动
./nginx
#关闭
./nginx -s stop
#重新加载配置文件
./nginx -s reload
配置文件
- 配置文件路径
/usr/local/nginx/conf/nginx.conf
- 内容
- 全局块:配置服务器整体运行的配置指令
比如 worker_processes 1:处理并发数的配置 - events 块 :影响 Nginx 服务器与用户的网络连接
比如 worker_connections 102:支持的最大连接数为 1024 - http 块
- http 全局块
- server块
- http 全局块
- 全局块:配置服务器整体运行的配置指令
配置实例-反向代理1
实现效果
访问Nginx服务器192.168.2.2,跳转到Linux系统Tomcat主页。
准备工作
安装JDK
#下载,从华为镜像下载比较快
wget https://repo.huaweicloud.com/java/jdk/11.0.1+13/jdk-11.0.1_linux-x64_bin.rpm
#安装
rpm -ivh jdk-11.0.1_linux-x64_bin.rpm
#验证安装结果
java -version
安装Tomcat
#下载
wget https://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.33/bin/apache-tomcat-9.0.33.tar.gz
#解压
tar -xvf apache-tomcat-9.0.33
#运行
[root@localhost bin]# ./startup.sh
开放端口或者关闭防火墙
具体配置
测试:
配置实例-反向代理2
实现效果
根据访问路径不同,跳转到不同服务器。
访问http://192.168.2.2:9001/edu/跳转到8080端口服务器
访问http://192.168.2.2:9001/vod/跳转到8081端口服务器
准备工作
- 准备两个Tomcat,8080和8081端口
- 创建文件夹和测试页面
分别在两个Tomcat的webapps目录下创建edu目录和vod目录,并在里面创建一个简单HTML页面
具体配置
上一个实例已经配置过一个server块,这个实例重新配置一个sever块,两者并不冲突。
location指令说明:
=
:用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配
成功,就停止继续向下搜索并立即处理该请求。~
:用于表示 uri 包含正则表达式,并且区分大小写。~*
:用于表示 uri 包含正则表达式,并且不区分大小写。^~
:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字
符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location块中的正则 uri 和请求字符串做匹配。
注意:如果 uri 包含正则表达式,则必须要有~
或者~*
标识。
配置实例-负载均衡
实现效果
访问http://192.68.2.2/edu/a.html,平均分配到8080和8081端口中
准备工作
- 准备两个Tomcat,8080和8081端口
- 两个Tomcat的webapps目录中创建edu目录,其中创建a.html文件
具体配置
分配策略
- 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。 - weight(权重)
weight 代表权,重默认为 1,权重越高被分配的客户端越多
指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。 例如:
upstream server_pool {
server 192.168.2.2 weight = 10 ;
server 192.168.2.2 weight = 10 ;
}
- ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
upstream server_pool {
ip_hash ;
server 192.168.2.2:80 ;
server 192.168.2.2:80 ;
}
- fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pool {
server 192.168.2.2:80 ;
server 192.168.2.2:80 ;
fair ;
}
配置实例-动静分离
实现效果
访问获取静态资源不经过Tomcat
准备工作
- 在Linux系统中保存一些静态资源
具体配置
autoindex on;的作用,可以显示目录
配置实例-高可用
实现效果
准备工作
- 两台Nginx服务器 192.168.2.2和192.168.2.4
- 安装keepalived
yum install keepalived -y
具体配置
配置/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.2.2
smtp_connect_timeout 30
# 访问到主机
#可以在/etc/hosts中设置名字
router_id localhost
}
# 检测脚本
vrrp_script chk_http_port{
script "/usr/local/src/nginx_check.sh"
#执行间隔
interval 2
#当前服务器挂掉时,设置权重
weight 2
}
vrrp_instance VI_1 {
state MASTER #从服务器此项为BACKUP
interface ens33 #网卡
virtual_router_id 51 #主从此id必须相同
priority 100 #主服务器较大,从服务器较小,值越大优先级越高
advert_int 1 #主从通信间隔
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.99 #VRRP 虚拟地址
}
}
在/usr/local/src/下添加检测脚本nginx_check.sh
#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
启动Nginx和keepalived
./nginx -s reload
systemctl start keepalived.service
测试
访问192.168.2.99应该可以访问到两台Nginx服务器,将主服务器停掉,看是否可以访问到从服务器。
也可通过ip a
命令查看主服务器虚拟ip绑定
将主服务器停掉之后,再访问:
访问到的是从服务器的页面,也可通过ip a
命令查看从服务器虚拟ip绑定
原理解析
- 查看Nginx运行的进程:有master和worker两个进程
- worker工作机制:
- 一个 master和多个woker的好处:
- 可以使用
nginx –s reload
热部署,利用nginx进行热部署操作(正在执行任务的worker继续执行当前任务,其他空闲worker争抢reload之后的任务) - 每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的,继续进行争抢,实现请求过程,不会造成服务中断。
- 可以使用
- 合适的worker数量设置:
worker 数量和服务器的 cpu 数量相等是最为适宜的 - 发送请求,占用了 woker的连接数
- 静态资源:配置过动静分离后,不需要进一步访问服务器,只占用2个连接
- 动态资源:需要进一步访问服务器,占用4个连接
- nginx 有1个master ,有4个 woker ,每个woker 支持最大的连接数 1024 ,支持的最大并发数是多少?
- 访问静态资源:
1024×4/2
- 反向代理访问:
1024×4/4
- 访问静态资源:
worker_connections × worker_processes /2
- 反向代理访问:
worker_connections × worker_processes /4
- 访问静态资源: