Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】

文章目录

  • Nginx功能块
  • Nginx、F5、路由、网关使用场景
  • 反向代理
  • 负载均衡
    • nginx 分配服务器策略
  • 动静分离
  • Nginx 配置高可用的集群
    • Keepalived+Nginx 高可用集群(主从模式)
    • Keepalived+Nginx 高可用集群(双主模式)
    • 安装 keepalived
  • Nginx的原理
    • worker如何工作的
    • 一个 master 和多个 woker 有好处
    • 设置多少个 woker 合适
    • 连接数 worker_connection
  • Nginx基本使用
    • Nginx安装
    • 关闭防火墙,开放访问的端口号
    • Nginx 的常用的命令
    • Nginx 的配置文件
  • Nginx 反向代理实例
    • 示例一:域名跳转
    • 示例二:按路径跳转不同端口
    • location 指令说明
  • Nginx 负载均衡实例
  • Nginx 动静分离实例
  • Nginx 高可用实例
  • 参考网址

Nginx功能块

  • 反向代理
  • 负载均衡
  • 动静分离
  • 高可用集群

Nginx、F5、路由、网关使用场景

  • F5:公司内网,服务器之间的访问
  • Nginx:与公网对接,通过Nginx跳转
  • 路由:
  • 网关:

反向代理

  • 正向代理:需要在客户端配置代理服务器进行指定网站访问,如域名—单个IP绑定
    Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】_第1张图片

  • 反向代理:暴露的是代理服务器地址,隐藏了真实服务器 IP 地址,可多个。
    Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】_第2张图片

  • 示例看后文

负载均衡

增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的 情况改为将请求分发到 多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡
Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】_第3张图片

  • 示例看后文

nginx 分配服务器策略

  • 第一种 轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
  • 第二种 weight weight 代表权重默认为 1,权重越高被分配的客户端越多
upstream server_pool{ 
server 192.168.5.21 weight=10; 
server 192.168.5.22 weight=10; 
}
  • 第三种 ip_hash 每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器
upstream server_pool{ 
ip_hash; 
server 192.168.5.21:80; 
server 192.168.5.22:80; 
}
  • 第四种 fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream server_pool{ 
server 192.168.5.21:80; 
server 192.168.5.22:80; 
fair;
}

动静分离

Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和 静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种,

  • 一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;
  • 另外一种方法就是动态跟静态文件混合在一起发布,通过 nginx 来分开。
    Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】_第4张图片
    通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏 览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源 设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可, 所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件, 不建议使用 Expires 来缓存),我这里设置 3d,表示在这 3 天之内访问这个 URL,发送一 个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304, 如果有修改,则直接从服务器重新下载,返回状态码 200。
  • 示例看后文

Nginx 配置高可用的集群

Keepalived软件类似路由,通过虚拟IP进行路由
(1)需要两台 nginx 服务器
(2)需要 keepalived
(3)需要虚拟 ip
Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】_第5张图片

Keepalived+Nginx 高可用集群(主从模式)

Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】_第6张图片

Keepalived+Nginx 高可用集群(双主模式)

Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】_第7张图片

安装 keepalived

  • 使用 yum 命令进行安装
    yum install keepalived –y
  • 安装之后,在 etc 里面生成目录 keepalived,有文件 keepalived.conf
  • 完成高可用配置(主从配置)
    (1)修改/etc/keepalived/keepalivec.conf 配置文件
// 全局配置
global_defs { 
    notification_email { 
        [email protected] 
        [email protected] 
        [email protected]
    } 
    notification_email_from                       
    [email protected] 
    smtp_server 192.168.17.129 
    smtp_connect_timeout 30 
    router_id LVS_DEVEL   #访问到主机LVS_DEVEL
}

----------------------------------------------------
// 检测脚本
vrrp_script chk_http_port { 
    script "/usr/local/src/nginx_check.sh" 
    interval 2 #(检测脚本执行的间隔) 
    weight 2  # 权重
}

-----------------------------------------------------
// 虚拟IP配置
vrrp_instance VI_1 { 
    state MASTER # 备份服务器上将 MASTER 改为 BACKUP 
    interface ens33 //网卡ens33
    virtual_router_id 50 # 主、备机的 virtual_router_id 必须相同 
    priority 90 # 主、备机取不同的优先级,主机值较大一般100,备份机值较小 
    advert_int 1
    authentication { 
        auth_type PASS 
         auth_pass 1111 
    } 
    virtual_ipaddress { 
        192.168.17.50 // VRRP H 虚拟地址,可多个
    } 
}

(2)在/usr/local/src 添加检测脚本,判断主服务是否挂掉,如果挂掉了则全杀掉,直接用备服务器

#!/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

(3)把两台服务器上 nginx 和 keepalived 启动
启动 nginx:./nginx
启动 keepalived:systemctl start keepalived.service

Nginx的原理

Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】_第8张图片

worker如何工作的

Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】_第9张图片

一个 master 和多个 woker 有好处

(1)可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作
(2)每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的, 继续进行争抢,实现请求过程,不会造成服务中断。

设置多少个 woker 合适

worker 数和服务器的 cpu 数相等是最为适宜的

连接数 worker_connection

  • 第一个:发送请求,占用了 woker 的几个连接数?
    • 答案:2 或者 4 个
  • 第二个:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的 最大并发数是多少?
    • 普通的静态访问最大并发数是: worker_connections * worker_processes /2
    • 而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4。

Nginx基本使用

Nginx安装

  • 准备工作
    (1)打开虚拟机,使用远程连接工具连接 linux 操作系统
    (2)到 nginx 官网下载软件 http://nginx.org/
  • 开始进行 nginx 安装
    1. 安装 pcre 依赖
      • 第一步 联网下载 pcre 压缩文件依赖 wget http://downloads.sourceforge.net/project/pcre/pcre/8.37/pcre-8.37.tar.gz
        在这里插入图片描述
      • 第二步 解压压缩文件
        使用命令 tar –xvf pcre-8.37.tar.gz
      • 第三步./configure 完成后,回到 pcre 目录下执行 make,最后执行 make install
        在这里插入图片描述
    2. 安装 openssl 、zlib 、 gcc 依赖
      yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
    3. 安装 nginx * 使用命令解压
      ./configure
      make && make install
    4. 进入目录 /usr/local/nginx/sbin/nginx 启动服务./nginx
      Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】_第10张图片

关闭防火墙,开放访问的端口号

在 windows 系统中访问 linux 中 nginx,默认不能访问的,因为防火墙问题
(1)关闭防火墙
(2)开放访问的端口号,80 端口

  • 查看开放的端口号 firewall-cmd --list-all
  • 设置开放的端口号
    firewall-cmd --add-service=http –permanent
    firewall-cmd --add-port=80/tcp --permanent
  • 重启防火墙firewall-cmd –reload

Nginx 的常用的命令

  • 进入 nginx 目录中 cd /usr/local/nginx/sbin
  • 查看 nginx 版本号 ./nginx -v
  • 启动 nginx ./nginx
  • 停止 nginx ./nginx -s stop
  • 重新加载【热部署worker】 nginx ./nginx -s reload

Nginx 的配置文件

1、nginx 配置文件位置
cd /usr/local/nginx/conf/nginx.conf
2、配置文件中的内容 包含三部分内容

  • 全局块:配置服务器整体运行的配置指令
    worker_processes 1 处理并发数的配置,值越大,可以支持的并发处理里量也越多
  • events 块:影响 Nginx 服务器与用户的网络连接
    worker_connections 1024 支持的最大连接数为 1024
  • http 块 还包含两部分,配置最频繁部分,每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。 而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
    http 全局块
    http 全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等
    server 块
    这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了 节省互联网服务器硬件成本。
    • 1、全局 server 块 最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或 IP 配置。
    • 2、location 块 一个 server 块可以配置多个 location 块。 这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称 (也可以是 IP 别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓 存和应答控制等功能,还有许多第三方模块的配置也在这里进行。

Nginx 反向代理实例

示例一:域名跳转

  • 实现效果:打开浏览器,在浏览器地址栏输入地址 www.123.com,跳转到 liunx 系统 tomcat 主页 面中

  • 准备工作

  • (1)liunx 安装 tomcat,使用默认端口 8080

  • (2)对外开放访问的端口
    firewall-cmd --add-port=8080/tcp --permanent
    firewall-cmd –reload
    查看已经开放的端口号 firewall-cmd --list-all

  • 第一步 在 windows/Linux 系统的 hosts 文件进行域名和 ip 对应关系的配置
    Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】_第11张图片

  • 第二步 在 nginx 进行请求转发的配置(反向代理配置) nginx.conf

    • server_name: IP地址【80端口下配置】
    • proxy_pass:转发路径,带应用端口,80转发到此
      Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】_第12张图片

示例二:按路径跳转不同端口

  • 实现效果 使用 nginx 反向代理,根据访问的路径跳转到不同端口的服务中 nginx 监听端口为 9001
    访问 http://192.168.17.129:9001/edu/ 直接跳转到 127.0.0.1:8080
    访问 http:// 192.168.17.129:9001/vod/ 直接跳转到 127.0.0.1:8081
  • 具体配置
    (1)找到 nginx 配置文件,进行反向代理配置
    Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】_第13张图片

(2)开放对外访问的端口号 9001 8080 8081

location 指令说明

该指令用于匹配 URL。 语法如下:

  1. = :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配 成功,就停止继续向下搜索并立即处理该请求。

  2. ~:用于表示 uri 包含正则表达式,并且区分大小写。

  3. ~*:用于表示 uri 包含正则表达式,并且不区分大小写。

  4. ^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字 符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。

注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。

Nginx 负载均衡实例

  • 实现效果
    浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,负载均衡效果,平均 8080 和 8081 端口中
  • 在 nginx 的配置文件中进行负载均衡的配置
    • upstream myserver:负载均衡的服务列表,带端口
    • location:配置映射关系,指向上面的myserver
    • 配置详解见“nginx 分配服务器策略”章节描述
      Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】_第14张图片

Nginx 动静分离实例

在 liunx 系统中准备静态资源,用于进行访问
Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】_第15张图片
Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】_第16张图片

Nginx 高可用实例

  • 配置高可用的准备工作
    (1)需要两台服务器 192.168.17.129 和 192.168.17.131
    (2)在两台服务器安装 nginx
    (3)在两台服务器安装 keepalived
  • 在两台服务器安装 keepalived
    参考:安装 keepalived 章节
  • 最终测试
  1. 在浏览器地址栏输入 虚拟 ip 地址 192.168.17.50
    Nginx教学完整版-Nginx学习手记适合初学快速掌握【含实例】_第17张图片

  2. 把主服务器(192.168.17.129)nginx 和 keepalived 停止,再输入 192.168.17.50一样可以访问

参考网址

尚硅谷:http://www.gulixueyuan.com/course/332/task/9922/show

你可能感兴趣的:(Nginx)