一、灰度发布(金丝雀发布)

灰度发布时使用比较平稳的过渡方式升级或者替换产品项目的方法统称

主要作用

  • 及时发现项目问题
  • 尽早获取用户反馈的信息,以改进产品
  • 如果项目产生问题,可以将问题影响控制到最小范围

【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灰度发布、网站限速和防盗链的更多相关文章

  1. Nginx作为web静态资源服务器——防盗链

    ​ 基于http_refer防盗链配置模块 Syntax:valid_referers none | blocked | server_names | string ...; Default:—— C ...

  2. nginx系统真正有效的图片防盗链完整设置详解

    原文:http://www.wufangbo.com/nginx-fang-dao-lian/ 关于nginx防盗链的方法网上有很多教程,都可以用,但是我发现很多教程并不完整,所做的防盗链并不是真正的 ...

  3. Nginx学习之如何搭建文件防盗链服务

    前言 大家都知道现在很多站点下载资料都是要收费的,无论是积分还是金币,想免费只能说很少很少了,那么这些网站是如何做到资源防盗链的呢? 这里推荐一款比较容易上手的神器,Nginx本身提供了secure_ ...

  4. lnmp/nginx系统真正有效的图片防盗链完整设置详解

    http://www.it300.com/article-15345.html 关于nginx防盗链的方法网上有很多教程,都可以用,但是我发现很多教程并不完整,所做的防盗链并不是真正的彻底的防盗链! ...

  5. 【09】Nginx:静态压缩 / 日志切割 / 防盗链 /恶意解析/ 跨域

    写在前面的话 上一节我们谈了关于 nginx 服务器的一些简单的安全优化问题,能够帮助我们解决一部分线上服务存在的安全隐患.但是想要提升用户体验这是原因不够的,我们还需要从服务的优化方面入手. 本节更 ...

  6. Nginx配之负载均衡、缓存、黑名单和灰度发布

    一.Nginx安装(基于CentOS 6.5) 1.yum命令安装 yum install nginx –y(若不能安装,执行命令yum install epel-release) 2. 启动.停止和 ...

  7. Nginx配置之负载均衡、限流、缓存、黑名单和灰度发布

    一.Nginx安装(基于CentOS 6.5) 1.yum命令安装 yum install nginx –y(若不能安装,执行命令yum install epel-release) 2. 启动.停止和 ...

  8. nginx——防盗链功能

    我们经常会看到在浏览某一图片时会弹出一“403权限禁止”错误,这说明有可能正在浏览的这个网站用到的图片在盗用别的网站图片,而被盗用的网站采用了防盗链技术.那么怎样才能不让自己的网站受害呢? 下面我来介 ...

  9. 【Nginx】实现负载均衡、限流、缓存、黑白名单和灰度发布,这是最全的一篇了!

    写在前面 在<[高并发]面试官问我如何使用Nginx实现限流,我如此回答轻松拿到了Offer!>一文中,我们主要介绍了如何使用Nginx进行限流,以避免系统被大流量压垮.除此之外,Ngin ...

  10. Nginx的优化与防盗链

    Nginx的优化与防盗链 1.隐藏版本号 2.修改用户与组 3.缓存时间 4.日志切割 5.连接超时 6.更改进程数 7.配置网页压缩 8.配置防盗链 9.fpm参数优化 1.隐藏版本号: 可以使用 ...

随机推荐

  1. 01.Alpine编译glibc

    概要 本文档采用glibc2.28版本作为示例,模拟内网环境无法访问github等开源社区 为精简docker容器镜像,采用Alpine镜像,需要手动编译glibc源代码 制作编译好的glibc二进制 ...

  2. testArticle

    Test Article This is a test article for ArticleSync. Test Edit...... test Edit

  3. php简单登录

    <?php // 1,php接收参数 $userName = $_POST['userName']; $userPwd = $_POST['userPwd']; // 2,PHP需要操作数据库 ...

  4. ETL工具-nifi干货系列 第十一讲 处理器UpdateAttribute使用教程

    1.在这里我们重温下nifi里面一个重要的概念FlowFile,如下图所示: FlowFile:FlowFile代表NiFi中的单个数据.nifi数据流中流动的就是flowfile,每个nifi处理器 ...

  5. 增补博客 第二篇 python 谢宾斯基三角型字符分形图形输出

    SIZE = int(input())# 输入分割次数 SIZE = SIZE<<3 # 将分割次数转为次数 y = SIZE - 1 # 用来控制列数 while y>=0: fo ...

  6. Json字符串转换处理html编码格式,= \u003d 处理

    Json字符串转换处理html编码格式,=  \u003d 处理 import com.alibaba.fastjson.annotation.JSONField; import com.faster ...

  7. SVG <pattern> 标签的用法和应用场景

    通过使用 <pattern> 标签,可以在 SVG 图像内部定义可重复使用的任意图案.这些图案可以通过 fill 属性或 stroke 属性进行引用. 使用场景 例如我们要在 <sv ...

  8. 获取ImageView的触摸点所对应的UIImage的坐标

    获取ImageView的触摸点所对应的UIImage的坐标 功能描述 实现前分析 注意事项 代码 求打赏 功能描述 在imageview上触摸图片,求对应UIImage的触摸点. 实现前分析 从ima ...

  9. 高通平台UEFI有关介绍

    高通平台UEFI有关介绍 背景 我需要在高通平台上学习点亮LCD,目前通过同事在别的平台的配置代码,我已经将kernel部分的屏幕点亮了:剩余的工作量就在BP侧,也就是系统刚开机的那一段时间.在开发过 ...

  10. sql-labs通关笔记(上)

    sql-labs通关笔记(上) 这里我们先只讲解less-1到less-9 联合查询注入 Less-1:GET -Error based.Single quotes -string 界面 在url中加 ...