Nginx_安装与配置实例(反向代理、负载均衡、动静分离、高可用)及原理

简介

Nginx 是高性能的 HTTP 和反向代理的服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。

  • 正向代理
    如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。
    在这里插入图片描述
  • 反向代理
    反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
    在这里插入图片描述
  • 负载均衡
    单个服务器解决不了的情况下,增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个,服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器
    在这里插入图片描述
  • 动静分离
    为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
    在这里插入图片描述

Linux中安装Nginx

  1. 安装 openssl 、zlib 、 gcc 依赖
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
  1. 安装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
  1. 安装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
  1. 启动Nginx
#进入
cd /usr/local/nginx/sbin
#启动
./nginx
#查看进程
ps -ef | grep nginx
  1. 查看配置文件,浏览器访问
# 配置文件在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

配置文件

  1. 配置文件路径
/usr/local/nginx/conf/nginx.conf
  1. 内容
    1. 全局块:配置服务器整体运行的配置指令
      在这里插入图片描述
      比如 worker_processes 1:处理并发数的配置
    2. events 块 :影响 Nginx 服务器与用户的网络连接
      在这里插入图片描述
      比如 worker_connections 102:支持的最大连接数为 1024
    3. http 块
      1. http 全局块
        在这里插入图片描述
      2. server块
        在这里插入图片描述

配置实例-反向代理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端口服务器

准备工作

  1. 准备两个Tomcat,8080和8081端口
    2.
    在这里插入图片描述
  2. 创建文件夹和测试页面
    分别在两个Tomcat的webapps目录下创建edu目录和vod目录,并在里面创建一个简单HTML页面

具体配置

上一个实例已经配置过一个server块,这个实例重新配置一个sever块,两者并不冲突。
在这里插入图片描述
location指令说明:

  1. = :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配
    成功,就停止继续向下搜索并立即处理该请求。
  2. ~:用于表示 uri 包含正则表达式,并且区分大小写
  3. ~*:用于表示 uri 包含正则表达式,并且不区分大小写
  4. ^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字
    符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location块中的正则 uri 和请求字符串做匹配。
    注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
    在这里插入图片描述
    在这里插入图片描述

配置实例-负载均衡

实现效果

访问http://192.68.2.2/edu/a.html,平均分配到8080和8081端口中

准备工作

  1. 准备两个Tomcat,8080和8081端口
  2. 两个Tomcat的webapps目录中创建edu目录,其中创建a.html文件

具体配置

在这里插入图片描述

分配策略

  1. 轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
  2. weight(权重)
    weight 代表权,重默认为 1,权重越高被分配的客户端越多
    指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。 例如:
upstream server_pool {
server 192.168.2.2 weight = 10 ;
server 192.168.2.2 weight = 10 ;
}
  1. ip_hash
    每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
upstream server_pool {
ip_hash ;
server 192.168.2.2:80 ;
server 192.168.2.2:80 ;
}
  1. fair
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pool {
server 192.168.2.2:80 ;
server 192.168.2.2:80 ;
fair ;
}

配置实例-动静分离

实现效果

访问获取静态资源不经过Tomcat

准备工作

  1. 在Linux系统中保存一些静态资源

具体配置

在这里插入图片描述
autoindex on;的作用,可以显示目录
在这里插入图片描述
在这里插入图片描述

配置实例-高可用

实现效果

在这里插入图片描述

准备工作

  1. 两台Nginx服务器 192.168.2.2和192.168.2.4
  2. 安装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绑定
在这里插入图片描述

原理解析

  1. 查看Nginx运行的进程:有masterworker两个进程
    在这里插入图片描述
    在这里插入图片描述
  2. worker工作机制:
    在这里插入图片描述
  3. 一个 master和多个woker的好处:
    1. 可以使用nginx –s reload热部署,利用nginx进行热部署操作(正在执行任务的worker继续执行当前任务,其他空闲worker争抢reload之后的任务)
    2. 每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的,继续进行争抢,实现请求过程,不会造成服务中断。
  4. 合适的worker数量设置:
    worker 数量和服务器的 cpu 数量相等是最为适宜的
  5. 发送请求,占用了 woker的连接数
    • 静态资源:配置过动静分离后,不需要进一步访问服务器,只占用2个连接
    • 动态资源:需要进一步访问服务器,占用4个连接
  6. nginx 有1个master ,有4个 woker ,每个woker 支持最大的连接数 1024 ,支持的最大并发数是多少?
    1. 访问静态资源:1024×4/2
    2. 反向代理访问:1024×4/4
    3. 访问静态资源:worker_connections × worker_processes /2
    4. 反向代理访问:worker_connections × worker_processes /4
发布了417 篇原创文章 · 获赞 45 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/Chill_Lyn/article/details/104999195