静态资源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