nginx灰度发布、网站限速和防盗链
一、灰度发布(金丝雀发布)
灰度发布时使用比较平稳的过渡方式升级或者替换产品项目的方法统称
主要作用
- 及时发现项目问题
- 尽早获取用户反馈的信息,以改进产品
- 如果项目产生问题,可以将问题影响控制到最小范围
【1】、基于不同IP进行灰度发布
proxy 代理
web01 开启80端口 开启8001端口
web02 开启80端口 开启8002端口
80端口(老业务)
800x端口(测试业务)
我们要在nginx中创建集群和if判断,将新业务和老业务分开,根据IP去区分,一类IP访问的时候会显示老业务,一类IP访问的时候是新业务1,另一类IP访问的时候是新业务2
# 修改nginx配置文件
# 创建3个集群
upstream s8001{
server 192.168.121.171:8001;
}
upstream s8002{
server 192.168.121.172:8002;
}
# 下面的是老业务
upstream default{
server 192.168.121.171:80;
server 192.168.121.172:80;
}
server {
listen 80;
server_name localhost;
# set 设置变量的含义,让group=default
set $group "default";
# 通过if判断来区分IP,给group赋不同的值
if ($remote_addr ~ "192.168.121.171"){
set $group s8001;
}
if ($remote_addr ~ "192.168.121.172"){
set $group s8002;
}
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
# 根据上面if判断,group得到的不同的值,去访问不同的网站
proxy_pass http://$group;
root html;
index index.html index.htm;
}
配置web01
在web01中创建一个虚拟主机,监听8001端口。
server{
listen 8001;
server_name localhost;
root html8001;
index index.html;
}
[root@web01 nginx]# mkdir html8001
[root@web01 nginx]#
[root@web01 nginx]# echo web01-8001 > html8001/index.html
[root@web01 nginx]# echo web01-80 > html/index.html
[root@web01 nginx]# sbin/nginx
配置web02
在web02中创建一个虚拟主机,监听8002端口。
server{
listen 8002;
server_name localhost;
root html8002;
index index.html;
[root@web02 nginx]# mkdir html8002
[root@web02 nginx]# echo web02-8002 > html8002/index.html
[root@web02 nginx]# echo web02-80 > html/index.html
[root@web02 nginx]# sbin/nginx
进行测试
预期结果
当我们使用IP为192.168.121.171去访问proxy时,会看到web01的新业务
当我们使用IP为192.168.121.172去访问proxy时,会看到web02的新业务
当我们使用其他IP去访问proxy时,会以轮询的形式看到web01和web02的老业务
root@proxy[19:30:15]:/usr/local/nginx
$ curl 192.168.121.170
web01-80
root@proxy[19:30:15]:/usr/local/nginx
$ curl 192.168.121.170
web02-80
[root@web01 nginx]# curl 192.168.121.170
web01-8001
[root@web01 nginx]# curl 192.168.121.170
web01-8001
[root@web02 nginx]# curl 192.168.121.170
web02-8002
[root@web02 nginx]# curl 192.168.121.170
web02-8002
【2】、通过用户id测试
对于一个网站来说,它可以有许多的用户去进行登录,但是,每一个用户都有一个对应且唯一的用户ID,我们可以针对用户的ID来进行区分,从而可以进灰度发布
准备一个测试网站
root@proxy[21:41:36]:~
$ ll php-memcached-demo.tar.gz
-rw-r--r--. 1 root root 158156 Jun 24 19:49 php-memcached-demo.tar.gz
root@proxy[21:41:46]:~
$ cp -r php-memcached-demo/* /usr/local/nginx/html/
修改网页源码(home.php)
如果用户名是以abc开头的,则点击开始跳转到192.168.121.171
如果不是则点击开始跳转到192.168.121.172
以此实现灰度发布
Welcome : <?php
if(preg_match("/^abc/",$_SESSION['login_user'] ) ){
echo "<a href='http://192.168.121.171'>开始</a>";
}
else
{
echo "<a href='http://192.168.121.172'>开始</a>";
}
?>
二、网站限速
- 需要共享的文件数量较大较多
- 服务器自身带宽有限
- 频繁遭受黑客攻击
- 业务利益最大化
速度限制
limit_rate 50k; 速度极限就是50k,不管运营商给的带宽是多少。
【1】、全局限速
# 修改nginx的配置文件,在http中写入如下内容,如果不写入server中,则表示全局限速,如果写入某一个server中,则表示只限制某一个虚拟主机
#gzip on;
limit_rate 100k;
server {
listen 80;
server_name localhost;
...
}
# 进行测试网速
[root@web01 nginx]# wget http://192.168.121.171/test.img
--2024-06-24 22:22:28-- http://192.168.121.171/test.img
Connecting to 192.168.121.171:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 104857600 (100M) [application/octet-stream]
Saving to: ‘test.img’
test.img 2%[> ] 2.44M 99.7KB/s eta 16m 38s
【2】、局部限速
有全局没有局部,按照全局算
有全局有局部,按照据不算
limit_rate 0k; 0k表示不限速
limit_rate 100k; # 全局限速
server {
limit_rate 200k; # 虚拟主机局部限速
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location /file_a{
limit_rate 300k; # 某一目录限速
}
location /file_b{
limit_rate 0k; # 0k 表示不限速
}
【3】、限速bug-突破限制
在上面我们进行了速度限制,但是存在一个bug。
比方说file_a目录下有两个文件需要下载,我在同时下载这两个文件,每一个的下载速度都在300k左右,但是此时我在你的服务器上的下载总速度是600k左右,相当于变相的突破了我们限制的速度
所以我们还需要继续加限制,让其连接数在同一时刻只能是1
# 修改nginx配置文件
limit_conn_zone $binary_remote_addr zone=addr:10m; # 设置连接限制
#gzip on;
limit_rate 100k;
server {
limit_rate 200k;
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location /file_a{
limit_rate 300k;
limit_conn addr 1; # 启用连接限制
}
三、防盗链
一个网站中的链接,连接到了另外一个网站中。这就是盗链,盗取了别的网站的信息,放在了自己的网站上
因此我们需要防盗链的配置,不允许别的网站来通过盗链盗取我的数据
具体实现原理:
通过referers参数来实现,referers是一个请求头,它能够标识你是从哪个地址来访问我这个网站的。我们可以设置,只有从自己的IP和空过来的请求才可以看到我的网页,其他都不许看,返回403
server {
listen 80;
server_name localhost;
valid_referers none 192.168.121.171; # 只有从空和192.168.121.171来的请求才可以访问
if ($invalid_referer){
return 403; # 其它全报403错误
}
charset utf8;
nginx灰度发布、网站限速和防盗链的更多相关文章
- Nginx作为web静态资源服务器——防盗链
基于http_refer防盗链配置模块 Syntax:valid_referers none | blocked | server_names | string ...; Default:—— C ...
- nginx系统真正有效的图片防盗链完整设置详解
原文:http://www.wufangbo.com/nginx-fang-dao-lian/ 关于nginx防盗链的方法网上有很多教程,都可以用,但是我发现很多教程并不完整,所做的防盗链并不是真正的 ...
- Nginx学习之如何搭建文件防盗链服务
前言 大家都知道现在很多站点下载资料都是要收费的,无论是积分还是金币,想免费只能说很少很少了,那么这些网站是如何做到资源防盗链的呢? 这里推荐一款比较容易上手的神器,Nginx本身提供了secure_ ...
- lnmp/nginx系统真正有效的图片防盗链完整设置详解
http://www.it300.com/article-15345.html 关于nginx防盗链的方法网上有很多教程,都可以用,但是我发现很多教程并不完整,所做的防盗链并不是真正的彻底的防盗链! ...
- 【09】Nginx:静态压缩 / 日志切割 / 防盗链 /恶意解析/ 跨域
写在前面的话 上一节我们谈了关于 nginx 服务器的一些简单的安全优化问题,能够帮助我们解决一部分线上服务存在的安全隐患.但是想要提升用户体验这是原因不够的,我们还需要从服务的优化方面入手. 本节更 ...
- Nginx配之负载均衡、缓存、黑名单和灰度发布
一.Nginx安装(基于CentOS 6.5) 1.yum命令安装 yum install nginx –y(若不能安装,执行命令yum install epel-release) 2. 启动.停止和 ...
- Nginx配置之负载均衡、限流、缓存、黑名单和灰度发布
一.Nginx安装(基于CentOS 6.5) 1.yum命令安装 yum install nginx –y(若不能安装,执行命令yum install epel-release) 2. 启动.停止和 ...
- nginx——防盗链功能
我们经常会看到在浏览某一图片时会弹出一“403权限禁止”错误,这说明有可能正在浏览的这个网站用到的图片在盗用别的网站图片,而被盗用的网站采用了防盗链技术.那么怎样才能不让自己的网站受害呢? 下面我来介 ...
- 【Nginx】实现负载均衡、限流、缓存、黑白名单和灰度发布,这是最全的一篇了!
写在前面 在<[高并发]面试官问我如何使用Nginx实现限流,我如此回答轻松拿到了Offer!>一文中,我们主要介绍了如何使用Nginx进行限流,以避免系统被大流量压垮.除此之外,Ngin ...
- Nginx的优化与防盗链
Nginx的优化与防盗链 1.隐藏版本号 2.修改用户与组 3.缓存时间 4.日志切割 5.连接超时 6.更改进程数 7.配置网页压缩 8.配置防盗链 9.fpm参数优化 1.隐藏版本号: 可以使用 ...
随机推荐
- Android 13 - Media框架(26)- OMXNodeInstance(三)
关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节我们了解了OMXNodeInstance中的端口定义,这一节我们一起来学习ACodec.OMXNode.OMX 组件使用的 buffer 到底 ...
- scala的基本语法
区分常量和变量 常量 变量 写一行代码,写多行代码,终端代码 数据类型 byte char short int long float double boolean 数据类型与java相似,但与jav ...
- yum install 出错
``` yum -y install ansible ``` 出错 一直在刷屏,刚开始以为在安装但是最后没有安装成功 百度发现是这是redhat7和8的yum源混用 1.先确认本机器系统信息 cat ...
- AGC043
AGC043 A.Range Flip Find Route 简单DP B.123 Triangle 推性质. 利用模运算将减法变成加法(在绝对值0/1的情况下). Giant Graph 类似于博弈 ...
- C#.NET 使用HttpWebRequest发送JSON
方法: public static string HttpPostJson(string url, string postStr, int timeOut, string charset) { Htt ...
- 解读surging 的内存过高的原因
前言 对于.NET开发人员来讲,一个程序占用内存过高,是极其糟糕,是一款不合格的程序软件,.NET开发人员也不会去使用服务器垃圾收集器(ServerGarbageCollection),而是选用工作站 ...
- 性能分析: 快速定位SQL问题
在数据库性能调优的实践中,SQL性能分析是至关重要的一环.一个执行效率低下的SQL语句可能会导致整个系统的性能瓶颈. 为了快速定位并解决这些问题,我们需要对SQL进行性能分析.本文将介绍一些常用的方法 ...
- word文档生成视频,自动配音、背景音乐、自动字幕,另类创作工具
简介 不同于别的视频创作工具,这个工具创作视频只需要在word文档中打字,插入图片即可.完事后就能获得一个带有配音.字幕.背景音乐.视频特效滤镜的优美作品. 这种不要门槛,没有技术难度的视频创作工具, ...
- mongodb连接类
import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.cl ...
- Jemter代理服务器录制脚本,优化后形成性能测试场景
在进行性能测试(压力.负载)等,先要有对应的测试场景,比如添加功能:要先登录成功,然后调用添加接口,输入添加的内容,才可以添加成功.那么可以通过Jemter代理服务器,设置代理,打开测试的网站,录制脚 ...