第1章 Nginx简介

1.1Nginx概述

Nginx (“engine x”)是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

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

1.2反向代理

(1)正向代理

需要在客户端配置代理服务器进行指定网站访问
image-20210423113028388.png

(2)反向代理

我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。
image-20210423113901641.png

1.3负载均衡

单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡。
image-20210423114851791.png

1.4动静分离

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度。降低原来单个服务器的压力。
image-20210423114910378.png

第2章 nginx的安装

2.1准备工作

  1. 使用远程连接工具连接linux操作系统
  2. nginx相关素材(依赖)

image-20210423132934128.png

2.2到nginx 官网下载软件

进入目录 /usr/local/nginx/sbin/nginx 启动服务
image-20210423133930072.png

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

  1. #查看开放的端口号
  2. firewall-cmd --list-all
  3. #设置开放的端口号
  4. firewall-cmd --add-service=http permanent
  5. firewall-cmd --add-port=80/tcp --permanent
  6. #重启防火墙
  7. firewall-cmd reload

image-20210423133951796.png

第3章 nginx常用的命令

  1. #使用nginx操作命令前提条件:必须进入nginx的目录
  2. cd /usr/local/nginx/sbin
  3. #查看 nginx 版本号
  4. ./nginx -v
  5. #启动 nginx
  6. ./nginx
  7. #停止 nginx
  8. ./nginx -s stop
  9. #安全退出
  10. ./nginx -s quit
  11. #重新加载 nginx
  12. ./nginx -s reload
  13. #查看nginx进程
  14. ps aux|grep nginx
  15. #以下命令不需要进入nginx的服务器
  16. #查看版本
  17. nginx -v
  18. # 开启
  19. systemctl start nginx.service
  20. # 重启
  21. systemctl restart nginx.service
  22. # 重载
  23. sudo systemctl reload nginx.service
  24. # 开机启动
  25. sudo systemctl enable nginx.service
  26. # 查看服务状态
  27. sudo systemctl status nginx.service
  28. #启动keepalived
  29. systemctl start keepalived.service

第4章 nginx的配置文件

4.1nginx配置文件位置

  1. cd /usr/local/nginx/conf/nginx.conf

image-20210423135943954.png

4.2配置文件中的内容

(1)nginx配置文件包含三部分内容

第一部分 全局块

从配置文件到events块之间的内容,主要会设置一些影响nginx服务器整体运行的配置指令

比如worker_processes 1; worker_processes值越大,可以支持的并发处理量也越多

第二部分 events块

events块涉及的指令主要影响Nginx服务器与用户的网络连接

比如worker_connections 1024 支持的最大连接数

第三部分 http块

nginx服务器配置中最频繁的部分

http块也可以包括 http 全局块server 块

第5章Nginx配置实例

5.1反向代理

1、实现效果

打开浏览器,在浏览器地址输入www.123.com,跳转linux系统tomcat主页面中

2、准备工作

(1)在 liunx 系统安装 tomcat,使用默认端口8080

  • tomcat 安装文件放到 liunx 系统中,解压
  • 进入 tomcat 的 bin 目录中,./startup.sh 启动 tomcat 服务器

(2)对外开放访问的端口

  1. firewall-cmd --add-port=8080/tcp --permanent
  2. firewall-cmd reload
  3. 查看已经开放的端口号
  4. firewall-cmd --list-all

(3)在windows 系统中通过浏览器访问 tomcat 服务器
image-20210423143546405.png

3、访问过程的分析

image-20210423144636567.png

4、具体配置

第一步
在 windows 系统的 host 文件进行域名和 ip 对应关系的配置
image-20210423144831766.png
(1)添加内容在 host 文件中
image-20210423145352343.png
第二步
在 nginx 进行请求转发的配置(反向代理配置)
image-20210423145406334.png

5、最终测试

image-20210423145421393.png

5.2反向代理实例2

1、实现效果

使用 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

2、准备工作

(1)准备两个tomcat服务器,一个 8080 端口,一个 8081 端口
(2)创建文件夹和测试页面

3、具体配置

(1)找到 nginx 配置文件,进行反向代理配置
image-20210423152039658.png
(2)开放对外访问的端口号 9001 8080 8081

4、最终测试

image-20210423152057193.png

补充:location 指令说明

该指令用于匹配 URL。
语法如下:
1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配

成功,就停止继续向下搜索并立即处理该请求。

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

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

4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字

符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location

块中的正则 uri 和请求字符串做匹配。

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

5.3负载均衡

1、实现效果

(1)浏览器地址栏输入地址 http://192.168.17.129/edu/a.html,负载均衡效果,平均 8080
8081 端口中

2、准备工作

(1)准备两台tomcat服务器,一台8080,一台 8081

(2)在两台tomcat里面webapps目录中,创建名称是 edu 文件夹,在 edu 文件夹中创建
页面 a.html,用于测试

3、在nginx的配置文件中进行负载均衡的配置

在http块中:
image-20210423154001430.png
image-20210423154008193.png

4、nginx分配服务器策略

第一种 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down 掉,能自动剔除。

第二种 weight
weight代表权重默认为1,权重越高被分配的客户端越多

image-20210423161539189.png
第三种 ip_hash
每个请求按访问ip的 hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
image-20210423161549265.png

第四种 fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配
image-20210423161558903.png

5.4动静分离

1、什么是动静分离

image-20210423162321996.png

通过 location 指定不同的后缀名实现不同的请求转发。通过 expires 参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体 Expires 定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量。此种方法非常适合不经常变动的资源。(如果经常更新的文件,不建议使用 Expires 来缓存),我这里设置 3d,表示在这3 天之内访问这个 URL,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码 304,如果有修改,则直接从服务器重新下载,返回状态码 200。

2、准备工作

(1)在liunx系统中准备静态资源,用于进行访问
image-20210423163637608.png

3、具体配置

(1)在nginx配置文件中进行配置
image-20210423163650114.png

4、最终测试

(1)浏览器中输入地址
http://192.168.17.129/image/01.jpg
image-20210423163706574.png
因为配置文件 autoindex on
image-20210423163723489.png
(2)在浏览器地址栏输入地址
[*http://192.168.17.129/www/a.html
](http://192.168.17.129/www/a.html)

image-20210423163736182.png

5.5nginx配置高可用的集群

1、什么是 nginx 高可用

image-20210423165221640.png
(1)需要两台nginx 服务器
(2)需要keepalived
(3)需要虚拟 ip

2、配置高可用的准备工作

(1)需要两台服务器 192.168.17.129192.168.17.131
(2)在两台服务器安装 nginx
(3)在两台服务器安装 keepalived

3、在两台服务器安装keepalived

(1)使用 yum命令进行安装

  1. yum install keepalived y

image-20210423165550333.png

(2)安装之后,在etc 里面会生成目录 keepalived,有文件 keepalived.conf

4、完成高可用配置(主从配置)

(1)修改 /etc/keepalived/keepalivec.conf 配置文件

  1. global_defs {
  2. notification_email {
  3. acassen@firewall.loc
  4. failover@firewall.loc
  5. sysadmin@firewall.loc
  6. }
  7. notification_email_from Alexandre.Cassen@firewall.loc
  8. smtp_server 192.168.17.129
  9. smtp_connect_timeout 30
  10. router_id LVS_DEVEL #访问到主机,vi /etc/host 查看主机名字
  11. }
  12. vrrp_script chk_http_port {
  13. script "/usr/local/src/nginx_check.sh"
  14. interval 2 #(检测脚本执行的间隔)
  15. weight 2 #权重
  16. }
  17. vrrp_instance VI_1 {
  18. state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
  19. interface ens33 #网卡
  20. virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
  21. priority 100 # 主、备机取不同的优先级,主机值较大,备份机值较小,90
  22. advert_int 1
  23. authentication {
  24. auth_type PASS
  25. auth_pass 1111
  26. }
  27. virtual_ipaddress {
  28. 192.168.17.50 # VRRP H 虚拟地址
  29. }
  30. }

(2)在 /usr/local/src 添加检测脚本nginx_check.sh

  1. #!/bin/bash
  2. A=`ps -C nginx -–no-header |wc -l`
  3. if [ $A -eq 0 ];then
  4. /usr/local/nginx/sbin/nginx
  5. sleep 2
  6. if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
  7. killall keepalived
  8. fi
  9. fi

(3)把两台服务器上 nginx 和 keepalived 启动

启动nginx:./nginx

启动keepalived: systemctl start keepalived.service

5、最终测试

(1)在浏览器地址栏输入 虚拟 ip地址 192.168.17.50
image-20210423165632530.png

image-20210423165643053.png
(2)把主服务器(192.168.17.129)nginx 和 keepalived 停止,再输入 192.168.17.50
image-20210423165653969.png

image-20210423165703058.png

第6章Nginx的原理

6.1master 和 worker

image-20210423165719814.png

image-20210423165731877.png

6.2worker 如何进行工作的

image-20210423165752177.png

6.3一个 master 和多个 woker 有好处

(1)可以使用nginx –s reload热部署,利用 nginx进行热部署操作

(2)每个 woker 是独立的进程,如果有其中的一个woker出现问题,其他woker 独立的,继续进行争抢,实现请求过程,不会造成服务中断

6.4设置多少个 woker 合适

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

6.5连接数 worker_connection

第一个:发送请求,占用了 woker的几个连接数?
答案:2或者4个

第二个:nginx 有一个 master,有四个 woker,每个 woker支持最大的连接数 1024,支持的最大并发数是多少?

  • 普通的静态访问最大并发数是: worker_connections * worker_processes /2
  • 如果是HTTP作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4。