【6-2】 Nginx进阶与实战

文章目录

2-0 在Nginx中解决跨域问题

跨域问题

跨域问题的本质:两个站点域名不一样,就会出现跨域问题。所以跨域问题的本质是域名不同。
跨域问题的出现是出于安全问题,浏览器拒绝跨站点的访问,从而限制ajax从一个站点向另一个站点请求或访问资源,W3C标准规范
在这里插入图片描述

CROS跨域资源共享

CROS:全称Cross-Origin Resource Sharing,允许浏览器向跨Origin的服务器发起js请求获取响应。
解决跨域的常用形式:Jsonp、StringBoot Cors、Nginx。

在这里插入图片描述

axios测试跨域

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
        // 为给定 ID 的 user 创建请求
        axios.get('http://www.imooc.com:90/imooc/img/face1.png')
        .then(function (response) {
            console.log(response);
        })
        .catch(function (error) {
            console.log(error);
        });
    </script>
</body>
</html>

在这里插入图片描述

解决跨域问题

SpringBoot配置

/**
 * @Description: 跨域访问
 * @Author: hmm
 * @Date: 2021/7/18
 */
@Configuration
public class CorsConfig {
    public CorsConfig(){
    }

    @Bean
    public CorsFilter corsFilter(){
        // 1.添加cros配置信息
        CorsConfiguration config = new CorsConfiguration();
        // tomcat部署前端项目url
        config.addAllowedOrigin("http://192.168.168.11:8080");
        // nginx部署前端项目url
        config.addAllowedOrigin("http://192.168.168.11:90");
        config.addAllowedOrigin("http://192.168.168.11:89");
        // 放行所有站点
        config.addAllowedOrigin("*");

        // 设置是否发送coolie信息
        config.setAllowCredentials(true);
        // 设置允许的请求方式
        config.addAllowedMethod("*");
        // 设置允许的header
        config.addAllowedHeader("*");
        // 2.为url添加映射路径
        UrlBasedCorsConfigurationSource corsSource = new UrlBasedCorsConfigurationSource();
        corsSource.registerCorsConfiguration("/**", config);
        // 3.返回重新定义好的corsSource
        return new CorsFilter(corsSource);
    }
}

Nginx跨域配置支持

修改imooc.conf,在相关server模块添加如下配置:

#允许跨域请求的域,*代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;

在这里插入图片描述在这里插入图片描述

2-1 在Nginx中配置静态资源防盗链

网站的图片、视频等资源如果不想被其他网站引用,可加入防盗链功能,加入后则只能自己域名访问,其他域名一概不能访问.

# 对源站点验证
valid_referers *.imooc.com; 
# 非法引入会进入下方判断
if ($invalid_referer) {
    return 404;
} 

在这里插入图片描述

2-2 Nginx的模块化设计解析

Nginx模块

  • nginx core:实现了一部分的底层通信协议,为其他模块、nginx进程等提供运行时的环境,可以看作JVM。

  • event module:事件模块 (linux默认的事件机制:epoll,是操作系统层面的事件处理机制)。

  • phase handler:处理客户端请求以及相应内容的响应

  • output filter:过滤器,会过滤一部分的内容,把内容再返回到浏览器,再去做响应。例如gzip,压缩的过程就是过滤的过程。

  • upstream:反向代理模块,会把真正的请求转发到真实的服务器,去响应真实的内容。

  • load balancer:负载均衡,实现集群、负载均衡的一些配置。

  • extend module:继承模块,相当于第三方模块 。
    在这里插入图片描述

Nginx安装包说明

  • auto 自动:nginx会自动检测识别操作系统和编译脚本
  • CHANGES:历史版本号,包含nginx的一些历史版本信息
  • CHANGES.ru:俄罗斯版本
  • conf 配置 :默认存放的配置文件,安装完毕后会将 安装包conf 目录中的文件 拷贝到安装目录中
  • configure:做编译配置
  • contrib:提供相应工具
  • html:默认存放的一些静态文件,安装完毕后会将 安装包html 目录中的文件 拷贝到安装目录中
  • LICENSE:说明,协议说明等
  • Makefile:编译make之后生成的文件
  • man:nginx守则
  • objs:整合第三方插件,安装完毕后会放在objs下方
  • README:
  • src:nginx源码
    • core:核心源码
    • event:事件处理的一些机制,封装了相应的方法、模块;
    • http:upstream 反向代理;upstream_round_robin 负载均衡
    • mail:nginx可以作为一个邮件的代理服务器去收发邮件的
    • misc:辅助的功能、辅助的代码
    • os:操作系统 和系统级别的封装在这里
    • stream:流 包含upstream反向代理流

在这里插入图片描述
CHANGES文件:
在这里插入图片描述conf目录:
在这里插入图片描述html目录:
在这里插入图片描述

2-3 Nginx的集群负载均衡解析

单节点

很累---> 压力大
生病---> 服务器瘫痪
虽说单节点处理,按正常理论上来说,请求多少都会处理完,,但是会有瓶颈,多节点就是为了解决瓶颈问题       

在这里插入图片描述

集群

优点:整体性能高、效率高
缺点:成本提高
原则:1 + 1 > 2
在这里插入图片描述

集群与负载均衡

Nginx的作用:网关、反向代理器、负载均衡器
upstream:所有的tomcat服务器,代表上游服务器。
注意:用户的所有请求都会有可能到达集群中其它任意一个tomcat节点,这就涉及到nginx的负载均衡。
负载均衡:把用户的所有请求平均的分配的其他后台的所有tomcat节点,当然也可以根据每一个后台服务器本身能承载的并发量大小,去根据它的权重去配置,也可以根据url地址到达某些特定的tomcat里。
在这里插入图片描述当Tomcat1服务器挂了,由于它在这个集群环境中,虽然之前的请求访问了Tomcat1,当它挂了后,以后请求不会再去访问Tomcat1,而是向其他服务器去请求。
在这里插入图片描述

2-7 四层、七层与DNS负载均衡

负载均衡的作用:

  • 能够为企业网络设备或者服务器带来更好的服务,提高吞吐量、提升并发性能、增强服务器的处理能力。
  • 可以提高服务器计算能力,使得我们的网络设备更加灵活。
  • 当有大量的并发请求来到服务器的时候,能够把这些请求分配到多台计算机节点上,让更多的节点来处理请求和响应,如此就可以大大缩减用户请求的等待时间。

四层负载均衡

四层负载均衡是基于IP + 端口的负载均衡。
原理是通过转发请求到后台的服务器,它只负责转发并且会记录当前连接是由哪个服务器处理的,后续这个连接的请求就会由同一台服务器去处理,其实相当于长连接,这个长连接一旦打开就会一直处理连接的状态,它的性能就会非常高。
四层是基于传输层的,主要基于 TCP和UDP。

1.F5硬负载均衡

  • 基于硬件的硬负载均衡,功能强,性能高,稳定性好
  • 商业级别的负载均衡,很贵,因为是基于硬件的

2.LVS四层负载均衡

  • 是Linux内核的四层负载,和协议无关,主要负责转发一些请求的,是基于CS端的

3.Haproxy四层负载均衡

  • 支持转发功能,灵活性非常高,除了四层以外也能够做七层的负载均衡

4.Nginx 四层负载均衡

  • 新版本里也能够做四层负载均衡,一般还是做七层负载均衡,以七层为主,主要是基于HTTP的一个负载均衡
  • 在nginx1.9版本后,新增了一个基于stream的四层负载均衡,可以用于实现四层协议的转发、代理等等

七层负载均衡

七层负载均衡是基于URL或IP的负载均衡,是基于应用层的,是针对于HTTP协议的一个负载均衡。

1.Nginx七层负载均衡:

  • 对http协议或邮箱协议做负载均衡,性能强劲

2.Haproxy七层负载均衡:

  • 灵活性很高

3.apache七层负载均衡:

  • 性能远不如nginx高,当并发达到百万级别后性能会越来越差

四层与七层负载均衡对比

四层

  • 一般会使用LVS;
  • 四层负载均衡主要适用于处理基于tcp、udp协议的负载均衡;
  • 四层是用于转发请求,而不是处理请求,它可以把用户请求转发给其他应用去处理。
    举例:黄牛不会处理用户诉求,只会把票卖你,比如想买第一排的票,但是他没有,你爱买不买,买了后也需要自己去找座位。

七层

  • 主要使用Nginx。
  • 七层一般用于处理http协议的,适用于web服务器,比如tomcat、apache、nginx;
  • 七层是会处理请求的,比如Nginx可以去处理(压缩或者缓存)静态资源等内容。
    举例:售票处可以根据用户需求处理, 会提供一些相应服务。

DNS地域负载均衡

客户端与DNS服务器交互,从DNS服务器获取当前的某一个IP,通过域名解析到的IP(是后端某个服务器的公网IP),DNS会根据客户端所在地域去进行反馈,采取请求的就近原则访问最近的服务器。

优点:所有的负载均衡工作交由DNS服务器去处理,根据IP地址采用就近原则访问最近的服务器,提高用户的访问速度。
在这里插入图片描述

2-8 OSI网络模型

OSI网络模型

网络模型就是OSI(Open System Interconnect),意思为开放网络互联,是由国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)共同出版的,他是一种网络互联模型,也是一种规范。

网络模型分为七层,也就是当用户发起请求到服务器接收,会历经七道工序,或者说用户利用互联网发送消息给另一个用户,也会历经七道工序。这七层可分为:

层级名称说明对应网络协议
第七层应用层与用户交互HTTP、HTTPS、FTP、SMTP、POP3
第六层表示层定义数据格式以及数据加密Telnet、Rlogin、SNMP、Gopher
第五层会话层创建、管理以及销毁会话SMTP、DNS
第四层传输层创建、管请求端到响应端(端到端)的连接TCP、UDP
第三层网络层请求端的IP地址IP、ICMP、 ARP、 RARP、 AKP、 UUCP
第二层数据链路层提供介质访问与链路管理FDDI、Ethernet、Arpanet、PDN、 SLIP、 PP
第一层物理层传输介质、物理媒介IEEE 802.1A、IEEE 802.2到IEEE 802.11

以上七层每层可以与上下相邻层进行通信。

  • 应用层(Application):
    这是面向用户的,最靠近用户,为了让用户和计算机交互,在计算机里会有很多软件,比如:eclipse、idea、qq、nginx等,这些都是应用软件,用户可通过这些应用软件和计算机交互,交互的过程其实就是接口的调用,应用层为用户提供了交互的接口,以此为用户提供交互服务。
    最常见的协议有:HTTP、HTTPS、FTP、SMTP、POP3等。Nginx在本层,为七层负载均衡。
    举例:我要寄一封信给远在天边的老外LiLei,会打开快递软件下单,这个时候我是用户,快递软件是应用服务,是建立在计算机上的,提供给用户交互的一种服务或称之为手段。

  • 表示层(Presentation):
    该层提供数据格式编码以及加密功能,确保请求端的数据能被响应端的应用层识别。
    举例:我写中文给LiLei,他看不懂,这时我就会使用翻译软件把中文译成英文,随后信中涉及到一些比较隐私的信息我会加密下,这个时候翻译软件和加密器就充当了表示层的作用,他用于显示用户能够识别的内容。

  • 会话层(Session):
    会话可以理解为session,请求发送到接受响应的这个过程之间存在会话,会话层充当了这一过程的管理者,从创建会话到维护会话最后销毁会话。
    举例:我每次写信给LiLei都会记录在一个小本本上,寄信时间日期、收信时间日期、这本上存有每次通信记录,这小本本相当于是一个会话的管理者。或者说,平时在打电话,首先需要拨打电话,这是建立会话,对方接听电话,此时正在通话(维持并管理会话),通话结束后会话销毁,那么这也是一次会话的生命周期。

  • 传输层(Transport):
    该层建立端到端的连接,它提供了数据传输服务,在传输层通信会涉及到端口号。
    本层常见协议:TCP、UDP。LVS在传输层,也就是四层负载均衡。
    TCP(transmission control protocol –传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据)
    UDP(user datagram protocol–用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。
    举例:我和LiLei通信过程中会借助快递公司,快递公司会分配快递员取件和寄件,那么这个快递员则充电传输层的作用。

  • 网络层(Network):
    网络通信的时候必须要有本机IP和对方的IP,请求端和响应端都会有自己的IP,IP相当于你家地址门牌号,在网络上云服务器有固定的公网IP,普通计算机也有,只不过是动态IP,运营商每天会分配不同的IP给你的计算机。所以网络层也称之为IP层,IP是互联网的基础根本,能提供IP分配的设备则为路由器或交换机。
    举例:对于拥有固定IP的云服务来说,它们都是由腾讯云、阿里云等这样的供应商提供,他们为云服务器提供固定IP;电信、移动、联通等运营商为你的计算机动态分配IP,每天都不同;则这些供应商和运营商都是网络层。同理,快递员由物流公司分配和管理,物理公司就是网络层。

  • 数据链路层(Data Link):
    这一层会提供计算机MAC地址,通信时会携带,为了确保请求投递正确,所以他会验证检测MAC地址,以确保请求响应的可靠性。
    举例:快递员在投递派送的过程中,他(或客服)会预先打电话给你,确认你家的地址对不对、有没有人、货到付款有没有准备好钱等,这时快递员(或客服)就充当了数据链路层的职责。

  • 物理层(Physical):
    端到端请求响应过程中的媒介,物理介质,比如:网线、中继器等设备,都是你在端到端交互过程中不可缺少的基础设备。
    举例:快递员在投递的过程中,你写的信会历经已写交通运输工具,比如首先通过飞机运输到国外,在海关统一拿到信以后会通过汽车运输到LiLei所在城市的物流集散地,最后快递员通过三轮电瓶车寄到LiLei家里,这时飞机、汽车、三轮电瓶车都是物理层的媒介。

参考:
OSI七层模型及TCP/IP四层模型
OSI七层协议模型、TCP/IP四层模型和五层协议体系结构之间的关系

2-9 使用Nginx搭建3台Tomcat集群

在这里插入图片描述
实际案例

1、实际使用2台服务器:
Nginx:192.168.168.11:81
Tomcat1:192.168.168.11:8080
Tomcat2:192.168.1.5:8080
在这里插入图片描述在这里插入图片描述2、修改imooc.conf文件:

# 配置上游服务器
upstream www.tomcats.com {
   server 192.168.168.11:8080;
   server 192.168.1.5:8080;
}

server {
	listen 81;
	server_name www.tomcats.com;
	
	location / {
		proxy_pass http://tomcats;
	}
}

在这里插入图片描述3.SwitchHosts配置域名
在这里插入图片描述在这里插入图片描述
4.访问Nginx
Nginx:192.168.168.11:81 、 www.tomcats.com:81
实际是以Nginx的形式访问到Tomcat集群
在这里插入图片描述

upstream配置一台server,其实是反向代理功能;
配置多台,就是Tomcat集群

2-9 使用JMeter测试单节点与集群的并发异常率

JMeter官网

2-10 负载均衡 - 轮询

轮询:

  • 负载均衡中最简单的,也是默认的策略;
  • Nginx不会去管服务器的硬件性质,只会将请求平均的分配到每一台集群服务器上;
    Nginx 负载均衡默认使用轮询机制:
  • 工作量平均分配
  • 适用于服务器性能配置一致的环境中
  • 最基础的负载均衡策略

在这里插入图片描述
三台服务器,按照第一台,第二台,第三台,依次循环

在这里插入图片描述

2-11 负载均衡 - 加权轮询

  • 服务器的配置可能不同,高的配置可以接受更多的请求,低的配置接受更少的请求
  • 使用权重属性来实现加权轮训——使用weight属性来配置,如果不配置,默认为1
  • 值越低,接受的请求越少
# 配置上游服务器,通过weight配置权重
upstream www.tomcats.com {
   server 192.168.168.11:8080;
   server 192.168.1.5:8080 weight=2;
}

server {
	listen 81;
	server_name www.tomcats.com;
	
	location / {
		proxy_pass http://tomcats;
	}
}

在这里插入图片描述

2-12 upstream的指令参数之max_conns在这里插入图片描述

Nginx官方文档地址

指令参数max_conns

用于限制一台服务器的最大连接数,(服务器指的是配置到upstream的服务器);
根据服务器本身能承受的最大流量去配置合适的数值,默认值是0,表示没有任何限制,如果有设置数值,用于服务器的过载保护,起到保险丝的作用,也就是限流;
老版本中商业版才能使用,新版本可以使用;
在使用多个工作进程worker process时,会使用到共享内存,每个工作进程都能生效 。

配置

worker进程设置1个,便于测试观察成功的连接

# worker进程设置1个,便于测试观察成功的连接数
worker_processes  1;

upstream tomcats {
        server 192.168.168.11:8080 max_conns=2;
        server 192.168.1.5:8080 max_conns=2;
}

1、修改imooc.conf:
在这里插入图片描述
2、修改nginx.conf:
在这里插入图片描述3、jmeter测试max_conns:

502错误表示拒绝服务(因为达到连接的上限)
在这里插入图片描述

2-14 upstream的指令参数之slow_start

slow_start

slow_start代表缓慢的加入到集群中,当期望服务器加入到集群中不直接接受大量请求时使用。
slow_start当负责均衡策略为轮询并且配置了(weight)权重时才有效,默认值为0秒,在配置的时间内,会把权重从0到配置的值进行递增。
可以用来观察流量从少到多的一个过程。
当负载均衡策略时hash和rendom时无效。
当upstream中配置单个服务器时无效。
在商业版中才有这个参数。

配置

upstream tomcats {
        server 192.168.168.11:8080 weight=6 slow_start=60s;
        server 192.168.1.5:8080 weight=2;
}

注:
该参数不能使用在hashrandom load balancing中。
如果在 upstream 中只有一台 server,则该参数失效。

2-17 upstream的指令参数之down和backup

down

down 标识服务器状态为不可用状态, 配置为down之后,服务器不可用了;
down用于标记服务节点不可用。

upstream tomcats {
        server 192.168.168.11:8080 down;
        server 192.168.1.5:8080 weight=2;
}

backup

backup表示当前服务器节点是备用机,只有在其他的服务器都宕机以后,自己才会加入到集群中,被用户访问到:

upstream tomcats {
        server 192.168.168.11:8080 backup;
        server 192.168.1.5:8080 weight=2;
}

注:backup参数不能使用在hash和random load balancing中。

2-19 upstream的指令参数之max_fails和fail_timeout

max_fails和fail_timeout 需配合使用

max_fails

max_fails:表示失败几次,则标记server已宕机,剔出上游服务。默认值为1.

fail_timeout

fail_timeout:表示失败的重试时间。默认值为10s.

配置

max_fails=2 fail_timeout=15s 

如上配置,则代表在15秒内请求某一server失败达到2次后,则认为该server以及挂了或宕机了,随后再过15秒,这15秒内不会有新的请求到达刚刚挂掉的节点上,而是会请求到正常运作的server,15秒后会再有新请求尝试连接挂掉的server,如果还是失败,重复上一过程,直到恢复。

2-21 使用Keepalive提高吞吐量

keepalived: 设置长连接处理的数量
proxy_http_version:设置长连接http版本为1.1
proxy_set_header:清除connection header 信息

upstream tomcats {
        server 192.168.168.11:8080;
        keepalive 32;
}
server {
        listen  81;
        server_name  www.tomcats.com;

        location / {
            proxy_pass  http://tomcats;
            # 设置长连接http版本为1.1:http1.1版本支持长连接,默认1.0
            proxy_http_version 1.1;
            # 清除connection header 信息:提高解析请求效率
            proxy_set_header Connection "";
        }
    }

keep-alive 32; 保持长连接数最大为32个,减少创建关闭连接损耗
在这里插入图片描述

吞吐量对比

  • 配置前
    在这里插入图片描述
  • 配置后
    在这里插入图片描述

负载均衡之ip_hash

在这里插入图片描述

hash算法 (和HashMap类似)

将用户的ip,通过hash算法得到的值 去 % 当前能够使用的服务器数量得到一个下标值;然后该下标值就决定用户请求落到哪一台服务器上;
在这里插入图片描述在这里插入图片描述上述所有的IP前三段内容一致,当使用不同的内网计算机节点,去访问网页时,都会访问到同一个后端服务;不同的外网去测试时,去访问网页时,会访问到不同的后端服务。

虽然用户会话可以保证在同一个tomcat里,但是有时用户IP会动态变化,导致会话有可能拿不到。
对于同一个用户,是可以访问到固定的tomcat,如果这个用户发起大量并发请求,可能会导致被访问的服务器宕机。
不能把后台服务器直接移除,只能标记down。要不然hash算法会发生更改,那么所有的算法会重新计算,会导致所有的用户会话、缓存失效。

配置

upstream tomcats {
	ip_hash;
	server 192.168.168.11:8080;
	server 192.168.1.5:8080;
}
server {
    listen  81;
    server_name  192.168.168.11;

    location / {
        proxy_pass  http://tomcats;
    }
}

参考:
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#ip_hash

2-25 一致性hash算法

hash算法带来的问题

当Tomcat3宕机了,模数从3变为2,之前所有的求模都要重新计算.
在这里插入图片描述在这里插入图片描述总结:
不管服务器节点增加或减少(宕机),hash算法都会重新进行计算,重新计算会导致用户在原来服务器的会话全部会丢失,并且在原服务器设置的缓存也会请求不到,最终会造成用户的请求时间更多。

解决方案: 一致性hash算法

根据服务器的ip或者主机名进行hash,使服务器分布在0 ~ (2^32-1)的圆环上(按顺时针方向放置),用户请求会根据顺时针方向的就近原则访问到某一个节点服务器。
在这里插入图片描述服务器减少:
节点3服务器宕机了,原来访问节点3的用户请求会访问到节点4,节点3的缓存、会话会丢失,但是其余用户访问无改变。
在这里插入图片描述
服务器增加:
在这里插入图片描述总结:
一致性hash算法可以保证绝大多数的用户请求依然能访问到原来的节点服务器,仅仅只有一部分用户请求会发生更改,这样会大大减少hash算法的风险。

2-26 负载均衡原理 - url hash 与 least_conn

负载均衡之url hash

在这里插入图片描述假设account(某一个url)有大量请求,Tomcat3会导致过热,这时可以把Tomcat3替换成Nginx,这台Nginx下方可以挂多个Tomcat。
配置:

upstream tomcats {
	# url hash
	hash $request_uri;
	server 192.168.168.11:8080;
	server 192.168.1.5:8080;
}
server {
    listen  81;
    server_name  www.tomcats.com;

    location / {
        proxy_pass  http://tomcats;
    }
}

负载均衡之least_conn

在这里插入图片描述Tomcat3服务器连接数少,当有新请求时,请求都会访问Tomcat3。
根据最少连接数进行请求。

upstream tomcats {
     # url hash
	#  hash $request_uri;
	# 最少连接数
	least_conn;
	server 192.168.168.11:8080;
	server 192.168.1.5:8080;
}
server {
    listen  81;
    server_name  www.tomcats.com;

    location / {
        proxy_pass  http://tomcats;
    }
}

2-28 Nginx控制浏览器缓存 - 1

在这里插入图片描述反向代理器的资源文件会缓存到浏览器,上游服务器包含静态文件会缓存到nginx端。

浏览器的缓存会加速单个用户(当前浏览器的访问者)的访问。

nginx端的缓存会优化内网的传输,nginx在获取上游服务器的资源时,也会去做请求,会有内网带宽的损耗,需要有一个请求和响应的时间,如果上游服务器的静态资源缓存到 nginx 端,内网的损耗就没那么大了,也会减少用户整个请求的响应时间。

演示

  • home/imooc目录下新建cache.html
    在这里插入图片描述
  • imooc.conf配置文件
server {
    listen        90;
    server_name   localhost;
    location / {
        root   /home/foodie-shop;
        index  index.html;
    }
    #  注:使用root时, imooc必须在home路径后
    location /imooc {
        root   /home;
    }
    location /static{
        alias /home/imooc;
    }
}
  • 强制刷新 http://192.168.168.11:90/static/cache.html 页面,代表初次访问
    初次访问:状态码是200(重新获取文件),大小534B,时间167ms
    在这里插入图片描述- 第2次访问 http://192.168.168.11:90/static/cache.html 页面
    状态码是304(304代表是缓存)
    在这里插入图片描述
  • 浏览器设置禁用缓存,无论刷新多少次,状态码都是200
    在这里插入图片描述

expires 指令

对于浏览器的缓存,可以使用expires指令做一定的控制,主要是针对一些静态资源文件缓存,比如 html、css、js、图片等。
在这里插入图片描述

expires [time]

  • 配置imooc.conf
server {
    listen        90;
    server_name   localhost;
    location / {
        root   /home/foodie-shop;
        index  index.html;
    }
    #  注:使用root时, imooc必须在home路径后
    location /imooc {
        root   /home;
    }
    location /static{
        # 缓存设置
        expires 15s;
        alias /home/imooc;
    }
}
  • 刷新页面
    请求的响应头部会多出属性

Cache-Control: max-age=15; # 相对过期时间
Exipires(过期时间) 的值 Date(当前时间) 的值恰好只差 15s

在这里插入图片描述- 修改cache.html,由于Last_Modified(修改时间)发生了更改,当再次请求时,就不会再使用缓存
在这里插入图片描述在这里插入图片描述

2-29 Nginx控制浏览器缓存 - 2

expires @[time]

其中22h30m指的是晚上22点半。
Date 和 Expires 的时间差 等于 Cache-Control 中的 max-age

server {
    listen        90;
    server_name   localhost;
    location / {
        root   /home/foodie-shop;
        index  index.html;
    }
    #  注:使用root时, imooc必须在home路径后
    location /imooc {
        root   /home;
    }
    location /static{
        alias /home/imooc;
        # 缓存设置
        # expires 15s;
        expires @22h30;
    }
}

在这里插入图片描述

expires -[time]

表示在当前时间点之前的time时缓存已过期.
Date 和 Expires相差1h。

server {
    listen        90;
    server_name   localhost;
    location / {
        root   /home/foodie-shop;
        index  index.html;
    }
    #  注:使用root时, imooc必须在home路径后
    location /imooc {
        root   /home;
    }
    location /static{
        alias /home/imooc;
        # 缓存设置
        # expires 15s;
        # expires @22h30;
        expires -1h;
    }
}

在这里插入图片描述

expires epoch

表示不去设置缓存。
设置后Response Headers中的expires的值是1970那个起始时间

server {
    listen        90;
    server_name   localhost;
    location / {
        root   /home/foodie-shop;
        index  index.html;
    }
    #  注:使用root时, imooc必须在home路径后
    location /imooc {
        root   /home;
    }
    location /static{
        alias /home/imooc;
        # 缓存设置
        # expires 15s;
        # expires @22h30;
        # expires -1h;
        expires epoch;
    }
}

在这里插入图片描述

expires off

表示默认浏览器缓存机制。
设置后Response Headers中的cach-control 和 expires字段就没有了

server {
    listen        90;
    server_name   localhost;
    location / {
        root   /home/foodie-shop;
        index  index.html;
    }
    #  注:使用root时, imooc必须在home路径后
    location /imooc {
        root   /home;
    }
    location /static{
        alias /home/imooc;
        # 缓存设置
        # expires 15s;
        # expires @22h30;
        # expires -1h;
        # expires epoch;
        expires off;
    }
}

在这里插入图片描述

expires max

表示最大缓存时间,缓存永不过期。
设置后标识缓存永不过期,cache-control的值就会特别大

server {
    listen        90;
    server_name   localhost;
    location / {
        root   /home/foodie-shop;
        index  index.html;
    }
    #  注:使用root时, imooc必须在home路径后
    location /imooc {
        root   /home;
    }
    location /static{
        alias /home/imooc;
        # 缓存设置
        # expires 15s;
        # expires @22h30;
        # expires -1h;
        # expires epoch;
        # expires off;
        expires max;
    }
}

在这里插入图片描述

2-30 Nginx的缓存

  • 浏览器缓存
    加速用户访问,提升单个用户(浏览器访问者)体验,缓存在本地。
  • Nginx缓存
    1.缓存在Nginx端,提升所有访问到nginx这一端的用户
    2.提升访问上游(upsteam)服务器的速度
    3.用户访问仍然会产生请求流量

控制浏览器缓存:

location /files {
    alias /home/imooc;
    # expires 10s;
    # expires @22h30m;
    # expires -1h;
    # expires epoch;
    # expires off;
    expires max;
}

2-31 Nginx的反向代理缓存

在这里插入图片描述
在Nginx端,也能够为上游服务器里的静态文件做到缓存的作用,从而实现用户请求的过程中能够加速访问以及提高请求的体验。

配置imooc.conf:

upstream tomcats {
	server 192.168.168.11:8080;
	server 192.168.1.5:8080;
}
# proxy_cache_path 设置缓存保存的目录
# 		keys_zone 设置共享内存以及占用的空间大小
#		max_size  设置缓存大小
#		inactive  超过此时间,则缓存自动清理
# 		use_temp_path 关闭临时目录
proxy_cache_path /usr/local/nginx/upstream_cache keys_zone=mycache:5m  max_size=200g inactive=30s use_temp_path=off;

server {
    listen  81;
    server_name  www.tomcats.com;
    
	# 开启并使用缓存
    proxy_cache mycache;
    # 针对200和304的状态码设置缓存过期时间
    proxy_cache_valid   200 303 8h;
    
    location / {
        proxy_pass  http://tomcats;
    }
}

访问http://www.tomcats.com:81/imooc/img/face1.png,/usr/local/nginx/upstream_cache 目录会生成缓存;超过30s后,缓存被自动清理。
在这里插入图片描述在这里插入图片描述

2-33 使用Nginx配置SSL证书提供HTTPS访问(无云服务,暂未实现)

  • https://www.imooc.com/(慕课网)已配置https,显示连接安全
    在这里插入图片描述

  • http://www.tomcats.com:81/foodie-shop/未配置https,显示连接不安全
    在这里插入图片描述

  • 使用https访问 https://www.tomcats.com:81/foodie-shop/,网站无法打开
    在这里插入图片描述

  • 配置https后,接口等也是以https所存在的
    在这里插入图片描述

2-34动静分离的那些事儿

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值