首页 > 系统相关 >nginx灰度发布、网站限速和防盗链

nginx灰度发布、网站限速和防盗链

时间:2024-07-26 09:41:33浏览次数:17  
标签:192.168 server nginx 灰度 web02 web01 root 防盗链

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

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

主要作用

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

【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;

标签:192.168,server,nginx,灰度,web02,web01,root,防盗链
From: https://www.cnblogs.com/xuruizhao/p/18324675

相关文章

  • Nginx秘籍!!!
    nginx笔记Yum安装nginx得先去配置nginx的Yum源,去到官网找,然后直接yum-yinstall下载[nginx-stable]name=nginxstablerepobaseurl=http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck=1enabled=1gpgkey=https://nginx.org/keys/nginx_signing.key​......
  • Centos离线安装 Nginx
    一、需求提出    公司刚刚申请了两台服务器,需要部署Nginx环境二、环境情况    系统是Centos的,需要离线安装。Linux中的环境很纯净C++环境也没有......#查看自己的版本cat/etc/os-release三、进行安装    1、准备需要安装的Nginx需要......
  • Nginx安全限流配置
    一、限制请求处理速率ngx_http_limit_req_module(NGXHTTP限制请求模块)方法:要配置Nginx以限制请求处理速率,你可以使用limit_req指令。这个指令允许你基于定义的区域(zone)和速率限制请求的频率。操作步骤:①定义限速区域:在http块中,使用limit_req_zone指令来定义限速区域。这个......
  • 几天没开启防盗链,花费 500 块......
    几天没开启防盗链,花费500块......‍‍2024年5月底,我因为在其他地方同步博客,为了方便就关闭了防盗链。然后过了几天,费用就有500+了.....:​‍‍而之前的账单都是才几块钱:​‍‍那几天确实是大意了,一下子花了好多钱。开启防盗链后访问量、带宽都激增了好多,这还是我......
  • nginx的一些功能
    一、四层(tcp/udp)代理由于nginx默认是不支持四层代理的因此在安装的时候需要加上对应的模块with-stream./configure--with-stream#查看当前nginx安装了什么模块root@proxy[05:52:09]:/usr/local/nginx$sbin/nginx-Vnginxversion:nginx/1.24.0builtbygcc8.5.0202......
  • nginx 代理eureka后css/js/fonts无法访问
    nginx代理eureka后css/js/fonts无法访问,页面没有样式server{listen80;server_nameyour_domain.com;location/eureka{proxy_passhttp://eureka_server_ip:8761;proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remo......
  • [SUCTF 2019]Pythonginx(url中的unicode漏洞引发的域名安全问题)
    @app.route('/getUrl',methods=['GET','POST'])defgetUrl():#从请求中获取url参数url=request.args.get("url")host=parse.urlparse(url).hostname#第一处检查主机名是否为'suctf.cc'ifhost=='s......
  • nginx反向代理配置,使用正则,三种方案
    方案一:使用变量和通配符location~^/(template-sitemap\d+\.xml)${proxy_passhttps://cdn.processon.io/sitemap/$1;} 解释:~表示使用正则表达式匹配。^/(template-sitemap\d+\.xml)$匹配以/template-sitemap开头,后跟一个或多个数字(\d+),然后以.xml结尾的路......
  • 解锁Nginx日志的宝藏:GoAccess——你的实时、交互式Web日志分析神器!
    在当今数字化的时代,网站的流量和用户行为数据就像是一座蕴藏着无尽秘密的宝藏。而如何有效地挖掘和分析这些数据,成为了许多网站管理者和开发者头疼的问题。GoAccess,一款开源的实时Web日志分析工具,或许能为我们提供一扇窥探这些秘密的窗口。GoAccess:你的流量分析好帮手GoAccess......
  • nginx如何配置图片缓存时间
    问题解释:Nginx是一个高性能的Web服务器和反向代理服务器,可以用于配置图片缓存时间。这样可以有效地减少服务器的负载,提高用户访问速度。答案:要在Nginx中配置图片缓存时间,需要修改Nginx配置文件(通常为nginx.conf或者在conf.d或sites-available目录下的配置文件)。以......