目录
一、限流
流量限制(rate-limiting)是nginx最有用的功能之一,却经常被错误理解和错误配置。它允许我们限制用户在给定时间内可以发出的HTTP请求数量。例如请求网站首页的GET请求,表单登录的POST请求等。
速率限制可以出于安全目的使用。例如,可以降低暴力破解账号密码的攻击速度。通过将传入请求速率限制为实际用户的典型值,并(通过记录)标识目标URL,它可以帮助我们防御DDOS攻击。而更为通用的用法是,防止上游应用程序服务器同时被太多用户请求所淹没。
二、nginx限流
Nginx 提供两种限流方式,一是控制速率,二是控制并发连接数。
1.漏桶算法(限制请求次数)
漏桶算法思路很简单,请求先进入到漏桶里,漏桶以固定的速度出水,也就是处理请求,当水加的过快,则会直接溢出,也就是拒绝请求,可以看出漏桶算法能强行限制数据的传输速率。
对于很多场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。
2.令牌桶算法(限制请求速度)
对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。
令牌桶算法的原理是系统以恒定的速率产生令牌,然后把令牌放到令牌桶中,令牌桶有一个容量,当令牌桶满了的时候,再向其中放令牌,那么多余的令牌会被丢弃;当想要处理一个请求的时候,需要从令牌桶中取出一个令牌,如果此时令牌桶中没有令牌,那么则拒绝该请求。
3.计数器(限制连接数)
计数器比较简单粗暴,比如我们限制的是1s能够通过的请求数,实现的思路就是从第一个请求进来开始计时,在接下来的1s内,每个请求进来请求数就+1,超过最大请求数的请求会被拒绝,等到1s结束后计数清零,重新开始计数。
这种方式有个很大的弊端:比如前10ms已经通过了最大的请求数,那么后面的990ms的请求只能拒绝,这种现象叫做“突刺现象”。
两种算法的区别
漏桶算法输入的时候请求不固定,但都会在漏桶里边先保存起来(小于漏桶的容量),然后输出的时候采用的是恒定的速率执行请求,有点像队列的先进先出,只是队列中的元素出队的时间间隔一致。
令牌桶算法跟漏桶算法刚好相反,令牌桶的大小就是接口所能承载的最大访问量,令牌的发放是恒速的,而最终能在某一时间处理的请求数不是恒定的,这取决于单位时间内令牌桶中的令牌数量。
从作用上来说,漏桶和令牌桶算法最明显的区别就是是否允许突发流量(burst)的处理,漏桶算法能够强行限制数据的实时传输(处理)速率,对突发流量不做额外处理;而令牌桶算法能够在限制数据的平均传输速率的同时允许某种程度的突发传输。
Nginx官方版本限制IP的连接和并发分别有两个模块:
1.limit_req_zone 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法 "leaky bucket"。
2.limit_req_conn 用来限制同一时间连接数,即并发限制。
三、SSL证书
1.什么是ssl证书?
SSL证书是数字证书的一种,由权威数字证书机构(CA)验证网站身份后颁发,可实现浏览器和网站服务器数据传输加密。网站安装SSL证书后会在浏览器显示安全锁标志,数据传输协议从http(传统协议) 升级为 https(加密协议)。
HTTPS并非新协议,相比于HTTP只是多了个S,表示Secure安全
安全的原理是基于HTTP+TCL/SSL协议组合实现的,所以HTTP和HTTPS的主要区别本质在于TCL/SSL安全协议上的区别
HTTPS是一种安全的协议,通过密钥交换算法 - 签名算法 - 对称加密算法 - 摘要算法确保安全
HTTPS默认443端口
2.证书作用
(1)浏览器绿色安全标志
各大主流浏览器的重视,对没有安装SSL证书的网站提示“不安全”,安装了SSL证书的网站浏览器会显示绿色安全标志,表示连接安全。
(2)网站数据加密传输
安装SSL证书之后,网站会从升级为 https(加密协议)。可加密保护网站的所有数据信息,保护访客注册登录,在线交易等信息数据,这对于电商、金融、政府、企业等网站至关重要。
小程序、抖音等平台对于合作的网址有相关的要求,即需要使用 https 链接。
(3)安全标志获得访客信任
OV、SSL证书可验证申请组织的真实身份,可在证书详情里查看申请企业。高级EV SSL证书还可在浏览器地址栏显示绿色企业名称,可加深访客对网站的信任,浏览使用更加放心。
(4)强大的加密等级保障
SSL证书之所以能够进行数据加密,和它的2048位加密技术是分不开的,时刻保护这敏感数据不被窃取、泄露。满足“等保”等相关政策对网站的安全要求。
OV 和 EV 证书除了安全加密之外,其实还有对网站管理者身份的验证,这个验证会体现在 SSL证书的字段中。而 EV 级别的 SSL证书甚至可以在某些版本的浏览器中直接显示单位名称。这一定程度帮助网站运营者确定了其“官方身份”,有助于帮助其用户识别真假网站。
最重要的一点,SSL证书帮助网站保护了用户和网站之间的任何数据的安全。如果没有SSL证书,用户在网站上的任何信息交互都将处于明文传输的状态,这其实上非常可怕的。也正因为如此,作为展示网站的浏览器,在推动SSL证书的普及上非常积极,甚至对没有SSL证书的网站在打开的时候进行了安全拦截。
3.SSL证书的类别
(1)按照验证方式
SSL证书可以分为 DV、OV、EV 三种,这三种SSL证书的验证严格程度依次递增。
DV SSL证书,验证简单,几分钟内即可签发,适合个人站点、小微企业、api 加密等,但这种证书只能实现 https 最基本的加密功能;
OV SSL证书,验证域名和网站背后的运营者单位,除了加强了网站的安全性之外,还让网站运营者身份得到了确认;
EV SSL证书,这种证书在 OV 的基础上验证更为全面,因此某些浏览器版本在地址栏上直接显示单位名称,因为这种显示形式,很多金融类、企业官网等网站都在使用这种类型的SSL证书。
(2)按照一张SSL证书保护的域名数
SSL证书可以分为单域名、多域名、通配符类型。但随着产品的不断优化,在颁发机构,大多数SSL证书都实现 Flex 模式,即在一张证书里面,您可以随意添加多个域名、通配符域名、甚至 IP 地址。
(3)按照 SSL证书的签发机构分类
可以分国产和进口。实事求是的说,咱们国产SSL证书的兼容性跟进口的SSL证书还是有差距,但这种差距正在逐渐缩小。从沃通CA的销售情况来看,近几年来申请国产的SSL证书也在逐渐增加,但申请国外品牌SSL证书的单位数量还是占有绝大部分。
4.SSL证书的使用成本
(1)免费SSL证书
这类证书建议适合一些流量不大的个人博客之类的站点。近几年发生过多起免费SSL证书被大规模吊销事件,相关资讯可以网上搜索一下,除此之外,免费的SSL证书更不会与您签合同,以及提供及时的技术支持,您还需要考虑SSL证书的响应速度、兼容性等。因此,如果您是单位正式的在线业务,谨慎使用免费SSL证书,毕竟出现问题后背锅是件很难受的事。
(2)基础版的 DV SSL证书
这类证书的成本区间在每年 100-1000 左右,这种成本相比单位其他的开支,其实不值一提。这种证书适用于一些后台的 API 之类的安全连接。
(3)企业版 OV SSL证书
这类证书根据品牌的不同,大概的成本在每年 1000 以上。
(4)扩展验证的 EV SSL证书
这类证书根据品牌的不同,大概的成本在每年 2000 以上。
5.HTTPS注意事项
1)https仅支持二级域名
2)https不支持续费,证书到期重新申请替换
3)https显示绿色,说明整个网站都是https的
4)https显示黄色,网站代码中包含https不安全链接
5)https显示红色,证书不认或过期
四、获取证书和密钥
1.关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
2.安装或更新openssl
yum install -y openssl
3.创建目录
cd /opt/nginx-1.15.9/
mkdir -p /etc/nginx/ssl_key
cd /etc/nginx/ssl_key/
4.创建私钥
openssl genrsa -idea -out server.key 2048
2048 是代表位数 位数越多越安全 常见的有 2048、4096
openssl req -days 3650 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt
req 表示证书输出的请求
-days 3650 时间=10 年
-x509 签发x509格式证书命令
-newkey 此选项创建一个新的证书请求和一个新的私钥。 该参数采用以下几种形式之 一。 rsa:nbits (其中nbits是位数)会生成nbits大小的RSA密钥
-key密钥
-new表示新的请求
-out输出路径
五、配置SSL模块
1.添加SSL模块
cd /opt/nginx-1.15.9/
./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx-module-vts-master/ --prefix=/usr/local/nginx --with-http_ssl_module
2.编译安装
出现报错可能是依赖包的问题,重新安装即可
yum install pcre-devel zlib zlib-devel openssl openssl-devel gcc gcc-c++ make
cd /usr/local/
ls
cd /opt/nginx-1.15.9/
./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx-module-vts-master/ --prefix=/usr/local/nginx --with-http_ssl_module
3.关闭服务
4.检测
5.编辑配置文件
vim /usr/local/nginx/conf/nginx.conf
server {
listen 443 ssl;
server_name www.ls.com;
ssl_certificate /etc/nginx/ssl_key/server.crt;
ssl_certificate_key /etc/nginx/ssl_key/server.key;
location / {
root /https-ls;
index index.html;
}
}
cd /
mkdir https-ls
echo "<h1>this is https ls</h1>" > /https-ls/index.html
7.添加地址映射
修改hosts配置路径:C:\WINDOWS\System32\drivers\etc
首次修改需要修改权限
属性→安全→高级→更改为所有权限
8.重启并访问
9.rewrite地址重写(http重定向到https)
vim /usr/local/nginx/conf/nginx.conf
修改80端口
server {
listen 80;
server_name www.ls.com;
rewrite .* https://$server_name$1 redirect;