系统学习Nginx之场景实践

静态资源WEB服务:

哪些是静态资源?
简单来说,能直接把相应文件发送到客户端的文件都是静态资源,如视频、html页面,js等资源

CDN:
使用CDN服务可以很好地为静态资源提供支持。

静态资源的相关设置:

sendfile:

语法:sendfile on|off  #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,减少用户空间到内核空间的上下文切换。对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。
默认:sendfile off
层级:http,server,location,if in location

tcp_nopush

sendfile开启的情况下才可使用,提高网络包的传输效率(例如等待10个包,然后一起发送)

语法:tcp_nopush on|off;
默认:tcp_nopush off;
层级:http,server,location

tcp_nodelay

和上面相反,尽量不等待,必须在keepalive连接下,提高网络包的传输实时性。

语法:tcp_nodelay on|off;
默认:tcp_nodelay on;
层级:http,server,location

使用gzip对静态文件压缩:

语法:gzip on|off; #是否开启gzip压缩
默认:gzip off;
层级:http,server,location,if in location

语法:gzip_comp_lever level;  #压缩比设置
默认:gzip_comp_lever 1;
层级:http,server,location

语法:gzip_http_version 1.0|1.1;  #gzip的http协议 
默认:gzip_http_version 1.1;
层级:http,server,location 

扩展Nginx压缩模块
http_gzip_static_module #预读gzip功能
http_gunzip_module #极少使用,用于解决不支持gzip压缩的浏览器

PS:gzip对文本的压缩效果最好

浏览器缓存:

expires:

原理:在返回头信息里增加Cache-Control、Expires头
语法:expires [modified] time; #表示缓存过期的时间周期
      expires epoch|max|off;  #少用,不用管
默认:expires off;
层级:http,server,location,if in location

跨站访问设置(防止CSRF):

语法:add_header name value [always];
默认:--
层级:http,server,location,if in location

防盗链:

语法:valid_referers [none|blocked|server_names] ... 
默认值:none 
使用字段:server, location 

实例代码:
     location /photos/ {
  valid_referers none blocked www.mydomain.com mydomain.com;

  if ($invalid_referer) {
    return   403;
  }
}

由于这个头可以被随意地伪造,所以这种方法并不完善,有被绕过的可能性。

代理服务:

正向代理反向代理区别:代理的对象不一样
正向代理的对象是客户端
反向代理的对象是服务端

语法:proxy_pass URL;
默认:--
层级:location,if in location,limit_except

测试代理的时候遇到了一个问题。就是因为某些原因,服务器重启了几次,导致一开始设置的某些设置项没有生效,最后是发现没有执行setenforce 0,从而没有关闭SELinux服务,那么,什么是SELinux呢?
它一款为了提高系统安全性的软件:对系统服务,文件权限,网络端口访问有极其严格的限制,例如 :如果对一个文件没有正确安全上下文配置, 甚至你是root用户,你也不能启动某服务。关闭之后,成功代理。

缓冲区:

为后端的服务器启用应答缓冲。
如果启用缓冲,nginx假设被代理服务器能够非常快的传递应答,并将其放入缓冲区,可以使用 proxy_buffer_size和proxy_buffers设置相关参数。

语法:proxy_buffering on|off; #尽可能地收集头信息,默认存在内存中
默认:proxy_buffering on
层级:http,server,location
扩展:proxy_buffer_size、proxy_buffers、proxy_busy_buffers_size

跳转重定向:

如果需要修改从被代理服务器传来的应答头中的”Location”和”Refresh”字段,可以用这个指令设置。

语法:proxy_redirect default|off|redirece replacement;
默认:proxy_redirect default
层级:http,server,location

头信息:

语法:proxy_set_header field value; #增加头信息
默认:proxy_set_header Host $proxy_host;proxy_set_header Connection close;
层级:http,server,location

扩展:proxy_hide_header、proxy_set_body

设置超时时间:

语法:proxy_connect_timeout time; #作为代理到后端服务器的超时,连接时间
默认:proxy_connect_timeout 60s;
层级:http,server,location

扩展:proxy_read_timeout、proxy_sent_timeout

负载均衡:

语法:upstream name {...};
默认:--
层级:http

举例:
# 设定负载均衡后台服务器列表 
http域
upstream  backend  { 
          #ip_hash; 
          server   192.168.10.100:8080 max_fails=2 fail_timeout=30s ;  
          server   192.168.10.101:8080 max_fails=2 fail_timeout=30s ;  
}

#server域对 / 所有做负载均衡+反向代理
    location / {
        root   /apps/oaapp;
        index  index.jsp index.html index.htm;

        proxy_pass        http://backend;  
        proxy_redirect off;
        # 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
        proxy_set_header  Host  $host;
        proxy_set_header  X-Real-IP  $remote_addr;  
        proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    }

后端服务器在负载均衡调度中的状态:
此处输入图片的描述

调度算法:
调度算法

url_hash
hash关键字轮询:

语法:hash key [consistent]; 举例hash $request_uri;
默认:--
层级:upstream
This directive appeared in version 1.7.2

缓存服务:

缓存有代理缓存,客户端缓存,服务器缓存

proxy_cache配置语法
语法:proxy_cache zone|off; #调用的哪个。。
默认:proxy_cache off;
层级:http,server,location

缓存过期周期配置:

语法:proxy_cache_valid [code ...] time; #对某些内容的时间周期,如http code码的时间周期
默认:--;
层级:http,server,location

缓存纬度:

语法:proxy_cache_key string; #
默认:proxy_cache key $scheme$proxy_host$request_uri; #协议主机域名等作为key缓存
层级:http,server,location

如何清空指定缓存:
1.rm -rf 缓存目录内容
2.第三方扩展模块 ngx_cache_purge

如何让部分页面不缓存:

语法:proxy_no_cache string...;
默认:--
层级:http,server,location

大文件分片请求http_slice_module:

语法:slice size;
默认:slice 0;
层级:http,server,location