Nginx从入门到实践(二)

静态资源web服务

静态资源类型

CDN

CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。

配置语法




tcp_nopush 告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送。
tcp_nodelay 告诉nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。



开启nginx gzip压缩后,网页、css、js等静态资源的大小会大大的减少,从而可以节约大量的带宽,提高传输效率,给用户快的体验,但会消耗cpu资源.


http_gzip_static_module 预读gzip功能

nginx配置,在相应的目录下添加相应的文件,取消注释进行检测查看

浏览器缓存

HTTP协议定义的缓存机制(如: Expires; Cache-control等)

无缓存请求

有缓存请求

校验机制

校验顺序

Expires

跨站访问


防盗链

http://nginx.org/en/docs/http/ngx_http_referer_module.html

valid_referers 代表可信referer,此处可信referer的设置将会使变量$invalid_referer的值为「0」,反之$invalid_referer的值为「1」,则执行IF条件名并返回相关限制结果。
none是指当referer为空的时候,比如在链接器中直接打开一个图片链接,若要禁止用户直接访问,则必须省掉none。
blocked 是指经过某些代理或firewall过滤后的referer,比如省略了url前缀等,同样地,若要禁止用户直接访问,则必须省掉blocked。
server_names 是nginx配置文件中的server name项,代指网站域名。

代理服务

http://nginx.org/en/docs/http/ngx_http_proxy_module.html


正向代理和反向代理的区别在于对象的不同
正向代理的对象是客户端,反向代理的对象是服务器
正向代理: A向C借钱,由于一些情况不能直接向C借钱,于是A想了一个办法,他让B去向C借钱,这样B就代替A向C借钱,A就得到了C的钱,C并不知道A的存在,B就充当了A的代理人的角色。
反向代理: A向B借钱,B没有拿自己的钱,而是悄悄地向C借钱,拿到钱之后再交给A,A以为是B的钱,他并不知道C的存在。 (个人搭建的豆瓣api)


豆瓣api代理

location  /v2 {
        proxy_store off;
        proxy_redirect off;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Referer 'no-referrer-when-downgrade';
        proxy_set_header User-Agent 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36';
        proxy_connect_timeout 600;
        proxy_read_timeout 600;
        proxy_send_timeout 600;
        proxy_pass https://api.douban.com/v2/;
}

负载均衡服务

负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

四层负载均衡: 即在OSI第4层(TCP层)工作。此种Load Balance不理解应用协议(如HTTP/FTP/MySQL等等)。例子:LVS,F5。
七层负载均衡: OSI的最高层,应用层。此时,该Load Balancer能理解应用协议。例子: haproxy,MySQL Proxy。

http://nginx.org/en/docs/http/ngx_http_upstream_module.html

Syntax: upstream name { ... }
Default: —
Context: http

  upstream backend {
     server backend1.example.com       weight=5;
      server backend2.example.com:8080;
      server unix:/tmp/backend3;
      server backup1.example.com:8080   backup;
      server backup2.example.com:8080   backup;
  }
  server {
       location / {
          proxy_pass http://backend;
       }
  }



调度算法
![](https://s1.ax1x.com/2018/12/13/Ftfz6S.png)


### 缓存服务

客户端缓存, nginx缓存, 服务器缓存
![](https://s1.ax1x.com/2018/12/13/Ft5QRx.png)

[http://nginx.org/en/docs/http/ngx_http_proxy_module.html](http://nginx.org/en/docs/http/ngx_http_proxy_module.html)

```shell
   Syntax: proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
   Default:    —
   Context:    http



   Syntax: proxy_cache zone | off;
   Default:    
   proxy_cache off;
   Context:    http, server, location


   # 设置不同响应代码的缓存时间
   Syntax: proxy_cache_valid [code ...] time;
   Default:    —
   Context:    http, server, location


   # 缓存维度(键)
   Syntax: proxy_cache_key string;
   Default:    proxy_cache_key $scheme$proxy_host$request_uri;
   Context:    http, server, location

如何清理指定缓存

  • rm -rf 缓存目录
  • 第三方扩展模块ngx_cache_purge

如何让部分页面不缓存

Syntax: proxy_no_cache string ...;
Default: —
Context: http, server, location

分片请求


优势:每个子请求收到的数据都会形成独立文件,一个请求中断了,其他请求不受影响,原本情况请求中断,再次请求文件将从头开始,而开启分片请求,就接下去获取未请求的小文件

劣势:当文件很大或者slice很小时,可能会导致文件描述符耗尽等情况

Syntax: slice size;
Default:    
slice 0;
Context:    http, server, location
posted @ 2018-12-13 15:24  寒菱  阅读(557)  评论(0编辑  收藏  举报