Nginx学习篇(一)

米阳 2020-5-5 549 5/5

作为一个前端开发nginx大家都不陌生,之前都是对nginx只知道怎么简单的配置代理什么server里改改端口改改location之类的,这次咱们从头捋一遍nginx,是复习也是学习。本篇大多是概念与原理的理解。

Nginx简介

Nginx轻量级的web服务器、反向代理服务器,是由伊戈尔·赛索耶夫(俄罗斯人)使用C语言编写的,并且是开源的。

正向/反向代理

正向代理

举一个常见的例子比如VPN,由于防火墙的原因我们不能直接访问谷歌、github等,我们借助VPN访问,用它来代理客户端,客户端就是我们知道目标是哪我们想访问谷歌,但是谷歌不知道是我们用VPN访问的它。正向代理主要作用是帮助客户端访问目标服务器同时隐藏客户端的真实身份。

反向代理

比如访问百度,每天很多用户都在访问,其实我们访问都是百度的代理服务器,代理服务器收到我们的请求按照规则发给后端服务器,然后返回给我们搜索结果,但是具体请求的哪一台服务器并不知道。反向代理主要作用就是隐藏服务器的信息。

负载均衡

将访问请求分发到多个服务器。

轮询法(默认)

每个请求按时间顺序依次分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

http {
    upstream myapp1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://myapp1;
        }
    }
}

加权轮询

可以在server指令中指定权重,权重越高,分配的请求越多。

http {
    upstream myapp1 {
        server srv1.example.com weight=3;
        server srv2.example.com;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://myapp1;
        }
    }
}

ip_hash

每个请求按访问ip的hash结果分配,使得同一客户端的请求总是被转发到同一个后端服务器,可以解决session问题。

http {
    upstream myapp1 {
        ip_hash;
        server srv1.example.com;
        server srv2.example.com;
    }
    server {
        listen 80;
        location / {
            proxy_pass http://myapp1;
        }
    }
}

缓存

客户端缓存

客户端缓存指的是浏览器缓存, 浏览器缓存是最快的缓存, 因为它直接从本地获取(但有可能需要发送一个协商缓存的请求), 它的优势是可以减少网络流量, 加快请求速度。

浏览器缓存可以分为两种模式,强缓存和协商缓存。

强缓存(无HTTP请求,无需协商)

直接读取本地缓存,无需向服务端发送请求确认,HTTP返回状态码是200(from memory cache或者from disk cache ,不同浏览器返回的信息不一致的)。相关的HTTP Header有:Cache-Control、 Expires

强制缓存原理: 浏览器在加载资源的时候,会先根据本地缓存资源的header中的信息(Expires 和 Cache-Control)来判断缓存是否过期。如果缓存没有过期,则会直接使用缓存中的资源;否则,会向服务端发起协商缓存的请求。

协商缓存(有HTTP请求,需协商)

浏览器虽然发现了本地有该资源的缓存,但是缓存已经过期,于是向服务器询问缓存内容是否还可以使用,若服务器认为浏览器的缓存内容还可用,那么便会返回304(Not Modified)HTTP状态码,告诉浏览器读取本地缓存;如果服务器认为浏览器的缓存内容已经改变,则返回新的请求的资源。

协商缓存原理: 当客户端向服务端发起请求时,服务端会检查请求中是否有对应的标识(If-Modified-Since或Etag),如果没有对应的标识,服务器端会返回标识给客户端,客户端下次再次请求的时候,把该标识带过去,然后服务器端会验证该标识,如果验证通过了,则会响应304,告诉浏览器读取缓存。如果标识没有通过,则返回请求的资源。

动静分离

在开发过程中,有些请求是需要后台处理的,有些请求是不需要经过后台处理(静态文件)如:css、html、js、图片。让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开,动态资源做好了拆分以后,我们就可以根据 静态资源 的特点将其做缓存操作,以提高资源的响应速度。

 

- THE END -
Tag:

米阳

8月06日14:05

最后修改:2024年8月6日
0

非特殊说明,本博所有文章均为博主原创。