Nginx进阶二
Nginx中间件配置语法:文件读取
sendfile on|off 默认off 现在有一种新的技术-with-file-aio异步文件读取
tcp_nopush on|off 默认off 在sendfile开启的情况下,提高网络包的报文传输效率,就是多次请求一次wanc
tcp_nodelay on|off 默认 on 和nopush对应,在keepalive连接下,提高网络包的传输实时性
gzip on | off 默认off 压缩传输 其实还要用到一些配置就是压缩比 gzip_comp_level level;默认gzip_comp_level 1;
压缩协议的版本gzip_HTTP_version 1.0|1.1 默认1.1 好
http_gzip_static_module 预读gzip功能,找有没有这种的压缩包
http_gunzip_module-应用支持gunzip的压缩方式。很少很少用到
二,浏览器缓存
http协议定义缓存机制(如expires 1.0版本;cache-contol:1.1版本等)
etag保存的是字符串,Last—Modified是时间,先判断cache-contol或者expires有没有过期,过期了再用etag和last_modified来访问服务端数据有没有更新
配置语法:-expires 添加Cache-Control、Expires头
expires [modified] time;
expires epoch | max |off
默认:expires off
三:跨越访问,一般服务器都会禁止客户端跨域仿问
打个比方:请求一个网站的时候因为ajax的缘故,又访问了不同的页面或者不良网00站
这样不良网站既可以通过客户端的ckeer或者其他协议攻击好的网站
配置语法:
add_header name//(一般为Access-Control-Allow-Origin 这个头)value[always]
列:
add_header Access—Control-allow-origin http://www.jesonc.com;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;请求方法
防盗链
防止资源被盗用,区别哪些是正常用户
基于http_refer防盗链配置模块,http_refer是http头的模块
vaild_referers//表示哪些referer信息可以访问访问 none//表示没有带referer信息的过来| blocked//一些特别的访问也是可以的,比如没有头 |server_name | string.....,
默认:-
context:server,location
http_refer是nginx的变量信息,可以去nginx配置文件的log_format里面查看
上一次访问的地址,
例:valid_referers none blocked 116.62.103.228 ~/google\./ //谷歌过来的也不隐蔽正则的匹配也是可以的
if($invalid_referer){
return 403;
}
二代理服务
RTMP表示流媒体
正向代理:翻墙,通过国外的电脑访问一些想访问的网站,页面等
反向代理:客户端访问代理,不知道那些服务器,代理负责查找相应的服务器
正向代理的对象是客户端,反向代理的对象是服务端
配置语法:
proxy_pass url//http,https.......
查看nginx启用的端口:netstat -luntp | grep nginx
在配置中server_name localhost hufangwenhaha.io //表示本机的域名为hufangwenhaha.io
$http_x_forwarded_for 里包含了代理和客户端的信息,ip,地址。。
正向代理:
if($http_x_forwarded_for !~* "^192.138.1.1"){
return 403;//也就是说只有192.138.1.1可以访问,做到权限控制
}
这样可以在192.138.1.1这台机器上配置
location / {
proxy_pass http://$需要访问的主机域名$需要的参数,访问的页面等等;。相当于跳转
}
reslover 8.8.8.8 表示dns解析的,nginx解析域名的时候需要dns解析,这个是谷歌的dns
接下来可以在浏览器上配置代理了,
其他配置语法-缓冲区
proxy_buffering on | off 默认on 减少io资源
扩展:proxy_buffer_size ,proxy_buffer,proxy_busy_buffers_size缺点是,需要更大的内存
http301代表重定向。
跳转重定向
一般默认就好
头信息
让后端服务器可以看到客户端的头信息非$http_x_forwarded_for得时候
proxy_set_heard field value;默认proxy_set_heard Host $pory_host;proxy_set_heard Connection class;
扩展:proxy_hide_header//隐藏 ,proxy_set_body
超时
proxy_connect_timeout time 默认60秒 扩展 proxy_read_timeout//建立连接的情况下,访问服务器时间,proxy_send_timeout//响应的时间如果缓存过大,超过了忙碌的界限,就会使用文档来存储了
企业在的配置
在大的项目中一般需要配置多份这个。可以建立一个文件,把公共的东西配置放里面,可以用include来导入
负载均衡
GSLB是全局负载均衡,范围非常广
一般不回去搭建而是运用云或者第三方设备
我们用的最多的是slb,调度节点和服务节点在一个域里面
nginx是就是slb
用模型划分slb,osi的模型分为四层负载均衡,和七层负载均衡
四层的效率非常高,作用是包的转发,只要对底层进行处理,不需要复杂的逻辑处理
与之对应的是七层负载均衡,在运用层,可以完成很多应用方面协议的请求(nginx)
负载均衡用到的就是代理和upstream
配置语法:
upstream name {.....}默认—— centext:http
例:iptables -I INPUT -p tcp --dport 8002 -j DROP //表示访问8002的访问全部drop掉
iptables -F 表示吧刚才iptables的效果去掉
upstream imooc//这个地方自己自定义{ //upstream:逆流而上
server 116.62.103.228:8001;//不止是ip的写法,也可以是域名的写法
server 116.62.103.228:8002; weight=5,在后面也可以加这个,表示权重循环的比重
server 116.62.103.228:8003;backup表示这是备份节点,其它节点都没用了,才用它
}
down:当前的server暂时不参加负载均衡
backup:预留当前的备份服务器
max_fails:允许请求失败次数
fail_timeout 进过max_fails失败后,服务暂停的时间
max_conns 限制最大的接收的连接数
server_name localhost hufangwen hufangwen代表这是域名
nginx负载均衡原来的做法是轮询,这样有缺点,cooker会有问题,每次访问不一致
把其它的权重的东西去掉,但也有缺点,如果再加一层代理就无法实现ip的一致性,会出大问题
为了解决上面的所有问题出现了url-hash,用url来确认服务器,可以确保每一次访问都在一台服务器上面,使每次的请求获取的数据一致。
语法:
hash key [consistent]; 默认—— context:upstream 在1.7以后才有
request_url代表请求参数,每次的请求request_url一致的时候,会定义到一台服务器上
在请求中有很长的请求参数,可以用正则表达提取出来,判定
缓存服务(也叫代理缓存)
减少后端压力
设置缓存文件目录路劲,来存放缓存文件的
proxy_cache zone//proxy_cache 的key的名字 | off 默认 off context:http,server,location
缓存过期周期
prxcy_cache_valid [code.....]//返回状态码 time; //时间周期
缓存维度设置
proxy_cache_key string 默认 proxy_cache_key $scheme//协议$proxy_host//域名server-name$request_uri;
例:
levels代表两层目录,分级了
key_zone:表示开辟的zone空间的名字,下面调用的就是这个名字,10m表示开辟空间的大小lm=8000key
max_size=10g表示目录的大小,最大10G
inactive=60m,不活跃的,在60分钟内没有数据访问,删除
use_temp_path=off,表示存放临时文件的,建议关闭
proxy_cache表示开启缓存
proxy_pass:表示代理
proxy_cache_vaild 200 304 12h,表示返回的200 和304 过期时间是12小时
add_header //表示添加头文件给客户端,名字是Nginx_cache
最后的proxy_next_upstream 表示如果请求服务器出问题,跳过它,访问下一台
清除缓存:1.rm -rf 缓存目录内容 2.第三方扩展模块ngx_cache_purge,清除指定文件
让指定的url页面不缓存
proxy_no_cache string.......;可以定义正则表达式,判断需不需要缓存,1代表不缓存
例:
大文件分片请求
slice size 默认slice 0
把大文件切割成小片,均匀的访问后端服务器
优势:每个子请求收到的数据都会形成一个独立的文件,一个请求断了,其他不受影响
缺点:当文件很大,或者slice很小的时候,可能导致文件描述符耗尽的情况