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.隐藏版本号: 可以使用 ...
随机推荐
- weinre 远程实时调试手机上的Web页面 JAVASCRIPT远程调试
版权归作者所有,任何形式转载请联系作者.作者:U_U(来自豆瓣)来源:https://www.douban.com/note/289846168/ 调试前端页面我一直使用着神器Chrome开发人员工具 ...
- 在 Flask 项目中配置 Session:简明指南
在 Flask 项目中配置 Session:简明指南 本文介绍如何在 Flask 项目中配置会话 1. Flask 内置会话 Flask 自带会话管理功能,使用客户端 Cookie 存储会话数据.默认 ...
- windows隐藏文件如何查看
1.组织 2.查看 3.显示隐藏文件
- JVM面试篇(下)
垃圾收集器 简述 Java 垃圾回收机制 在 java 中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行.在 JVM 中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行 ...
- xv6 内核空间共享
首发公号:Rand_cs 共享内核空间 我们常说,每个进程都有自己的虚拟地址空间,但其中内核部分是共享的. 这就有个问题,如何共享的? 系统启动时创建了一张内核页表,里面记录着内核地址空间与物理地址空 ...
- 使用final shell 连接使用 ubuntu server linux
书接上回,VM 安装ubuntu server:https://www.cnblogs.com/runliuv/p/16880599.html 1.从 https://www.hostbuf.com/ ...
- java8 API 函数式接口
简介 14年,Oracle公司如期发布了Java 8正式版,Java8提供了强大的流式处理及函数式接口编程 函数式接口编程,相信很多人在javascript中都使用过,比如回调函数,如今Java8也吸 ...
- vite+vue3+ts+elementPlus前端框架搭建 [一]
记录下搭建vite + vue3 + ts + elementPlus项目的过程及遇到的问题. 建议使用pnpm安装依赖,npm切换到pnpm 链接地址:[https://www.pnpm.cn/in ...
- https请求,Java代码忽略https证书:解决No subject alternative names present问题
https请求,Java代码忽略https证书:解决No subject alternative names present问题 package com.test.utils; import org. ...
- 如何使用JavaScript实现在线Excel附件的上传与下载?
前言 在本地使用Excel时,经常会有需要在Excel中添加一些附件文件的需求,例如在Excel中附带一些Word,CAD图等等.同样的,类比到Web端,现在很多人用的在线Excel是否也可以像本地一 ...