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.隐藏版本号: 可以使用 ...
随机推荐
- 网页唤起qq加群
今天在网上大浪淘沙了一番,90%的教程都是使用的鹅厂官方的加群组件,但是有个致命bug就是这个加群组件只能唤起自己创建的群,这就很尴尬了,后来偶然发现在qq群资料那边就可以直接获取到加群的链接,害得我 ...
- map数据类型
MAP数据类型是一个类似于对象的数据类型 大型项目中会经常使用 通过 构造函数来定义MAP数据类型 con ...
- 限速上传文件到腾讯对象存储cos的脚本
官网:https://cloud.tencent.com/document/product/436/12269 安装包,这里用的python2.7 # pip install -U cos-pytho ...
- invalid comparison: java.util.ArrayList and java.lang.String 异常分析及解决方法
nvalid comparison: java.util.ArrayList and java.lang.String 异常解决方法异常原因首先我们可以确定是在mybatis的xml中的 list 操 ...
- 实战分析Java的异步编程,并通过CompletableFuture进行高效调优
一.写在开头 在我们一开始讲多线程的时候,提到过异步与同步的概念,这里面我们再回顾一下: 同步:调用方在调用某个方法后,等待被调用方返回结果:调用方在取得被调用方的返回值后,再继续运行.调用方顺序执行 ...
- ESM风潮下企业服务的最佳实践探讨
甄知科技孵化于中国领先的IT咨询服务提供商-上海汉得信息技术股份有限公司,主打产品"燕千云"于2019年正式发布,持续迭代版本至今,燕千云作为企业数字化服务平台,燕千云的愿景和现状 ...
- linux查看端口命令 lsof netstat
[root@VM-4-3-centos /]# lsof -i:8881COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEnode 15526 roo ...
- Service Mesh技术详解
深入探讨Service Mesh的基本概念和核心技术,涵盖了服务发现.负载均衡.断路器与熔断机制,以及数据平面与控制平面的详细工作原理和实现方法. 关注作者,复旦博士,分享云服务领域全维度开发技术.拥 ...
- 颠覆传统编程,用ChatGPT十倍提升生产力
我们即将见证一个新的时代!这是最好的时代,也是最坏的时代! 需求背景 背景: 平时会编写博客,并且会把这个博客上传到github上,然后自己买一个域名挂到github上. 我平时编写的博客会有一些图片 ...
- 使用Spleete进行人声与背景声分离
安装:https://pypi.org/project/spleeter/ 下载权重: 2sterms.tar.gz https://github.com/deezer/spleeter/releas ...