Nginx是一款高性能的web服务器,有很多用途。
一、静态代理
Nginx擅长处理静态文件,是非常好的图片,文件服务器。把所有的静态资源放到nginx上,可以使应用动静分离,性能更好。
https://blog.csdn.net/wzs535131/article/details/90452864
二、负载均衡
nginx通过反向代理可以实现服务的负载均衡,把请求按照一定的策略转发到不同的服务器上。
https://blog.csdn.net/wzs535131/article/details/90489159
三、限流
nginx的限流模块在高并发的场景下非常实用。
主要通过2个参数来配置限流,limit_req_zone和limit_req
limit_req_zome 一般定义在http模块中,该指令可以在多个环境中使用,它有3个参数。
key:在限流应用之前定义了请求的特征,key可以是$binary_remote_addr,该变量代表了某个客户端ip地址的二进制形式。
key也可以是$remote_addr,但是会占用更多的空间。
zone:定义了存储每个ip地址状态和它访问受限请求url的频率的共享内存区域。将这些信息保存在共享内存中,
意味着这些信息能够在nginx工作进程之间共享。格式 zone=关键字标识的区域名称:区域大小
Rate:设置最大的请求速率。
如下配置:
http {
limit_req_zone $binary_remote_addr zone=perip:30m rate=70 r/s;
}
limit_req_zone指令设置限流和共享内存区域的参数,但是该指令并不限制请求速率,为了限制起作用,
需要将限制应用到某个特定的location或server中,通过包含一个limit_req指令的方式。
如下:
http {
limit_req_zone $binary_remote_addr zone=perip:10m rate=10 r/s;
location /service{
limit_req zone=perip;
proxy_pass http://service2Cluster;
}
}
如上配置每个特定的ip地址每秒10个请求,即不能再前一个请求的100ms内发送请求,
如果100ms内得到了大于1个的请求,nginx会发送503状态码,但这不是我们想要的,我们想尽可能多
的缓存请求,把请求放到对列中,并及时处理。我们可以使用limit_req参数来配置。
location /service{
limit_req zone=perip burst=20;
proxy_pass http://service2Cluster;
}
该设置表示如果在规定范围的时间内请求超过1个,则放入队列,且该队列大小为20;
当队列中新来了一个请求使请求大于20,则会返回给客户端503;
无延迟排队:除了burst参数外,添加nodelay参数。
location /service{
limit_req zone=perip burst=20 nodelay;
proxy_pass http://service2Cluster;
}
如上例:队列大小为20,其中有12个请求,突然又来了20个请求,队列只能存放8个请求,则会使用503拒绝
存放不下的12个请求。
四、缓存
1.浏览器缓存,静态资源缓存用expire。
浏览器在用户磁盘上,将一些静态资源缓存在浏览器后节约了网络资源,提高了网络效率。
浏览器缓存可以通过expores指令输出header头来实现,expires指令语法 :expires[time|epoh|max|off]
默认值:expires off 作用域:http ,server,location
使用expires指令可以控制http应答中的expires和Cache-Control 的header头信息,起到控制页面缓存的作用。
expires指令参数说明:
Time:可以使用正数或负数,Expires头标的值,将通过当前系统时间加上设定的time值来获得。
epoch:指定expires的值为1January,1970,00:00:01 GMT。
Max:指定expires的值为31December 2037 23:59:59 GMT,Cache-Control的值为10年。
off:表示不修改Expires和Cache-Control的值。
例如:对常见格式的图片在浏览器本地缓存10天,对js,css文件在浏览器本地缓存1小时。
配置如下:
location ~ .*\.(gif|jip|jpeg|png|bmp|swf)$ {
expires 10d;
}
location ~.*\.(js|css)?$ {
expires 1h;
}
2.代理层缓存
代理缓存配置:
upstream node {
server 191.10.191.32:8081;
server 191.10.191.32:8082;
}
proxy_cache_path /cache levels=1:2 keys_zone=cache:10m max_size=10g inactive=60m use_temp_path=off;
server {
listen 80;
server_name www.test.com;
index index.html;
location / {
proxy_pass http://node;
proxy_cache cache;
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 10m;
add_header Nginx-Cache "$upstream_cache_status";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
}
参数详解:
proxy_cache_path /soft/cache levels=1:2 keys_zone=cache:10m max_size=10g inactive=60m use_temp_path=off;
#proxy_cache //存放缓存临时文件
#levels //按照两层目录分级
#keys_zone //开辟空间名,10m:开辟空间大小,1m可存放8000key
#max_size //控制最大大小,超过后Nginx会启用淘汰规则
#inactive //60分钟没有被访问缓存会被清理
#use_temp_path //临时文件,会影响性能,建议关闭
proxy_cache cache;
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 10m; add_header Nginx-Cache "$upstream_cache_status";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
#proxy_cache //开启缓存
#proxy_cache_valid //状态码200|304的过期为12h,其余状态码10分钟过期
#proxy_cache_key //缓存key
#add_header //增加头信息,观察客户端respoce是否命中
#proxy_next_upstream //出现502-504或错误,会跳过此台服务器访问下一台服务器
具体引用:https://www.cnblogs.com/lovelinux199075/p/9064431.html
五、黑白名单
1.黑名单
在nginx的conf目录下面建立black.conf(名称随意),把想要屏蔽的ip加入这个文件,格式如下:
deny 192.34.35.92;
在nginx的配置文件nginx.conf按照相应格式加入代码如下:
include black.conf;
屏蔽ip文件可以屏蔽多个,也可以屏蔽ip段,或者只允许某个ip访问。
deny IP;//屏蔽单个ip访问
allow IP;//允许单个ip访问
deny all;//屏蔽所有ip访问
allow all;//允许所有ip访问
deny 123.0.0.0/8;屏蔽整个ip段,从123.0.0.1到123.255.255.254
单个网站屏蔽ip:把include black.conf;放到网址对应的在server {}语句块;
多个网站屏蔽IP的方法:把include black.conf;放到http {}语句块。