uWSGI、灰度发布、网站数据指标分析、网站限速

1 案例1:部署Python网站项目

1.1 问题

配置Nginx使其可以将动态访问转交给uWSGI:

1.2 方案

安装Python工具及依赖

安装uWSGI并编写配置文件

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:

首先$教学资料目录/python拷贝到虚拟机

1)安装python依赖软件

    [root@proxy python]# yum  -y install  gcc  make  python3  python3-devel

2)安装项目依赖

    [root@proxy python]# pip3 install  pytz-2022.6-py2.py3-none-any.whl
    [root@proxy python]# pip3 install  Django-1.11.8-py2.py3-none-any.whl
    [root@proxy python]# pip3 install  django-bootstrap3-11.0.0.tar.gz

3)测试项目

    [root@proxy python]# tar -xf python-project-demo.tar.gz
    [root@proxy python]# cd python-project-demo/
    [root@proxy python-project-demo]# python3 manage.py runserver 0.0.0.0:8000

之后可在浏览器访问192.168.99.5:8000,测试完毕后按ctrl + c

注意:测试时如果无法连接外网,可能需要将python-project-demo/learning_logs/templates/base.html文件中的特效注释

    <!--    {% bootstrap_css %}
        {% bootstrap_javascript %}
    -->

步骤二:

1)安装uWSGI

    [root@proxy python-project-demo]# cd ..
    [root@proxy python]# pip3 install uWSGI-2.0.21.tar.gz
    [root@proxy python]# vim   myproject.ini
    [uwsgi]
    socket=127.0.0.1:8000                  #与web服务(nginx)通信的接口
    chdir=/root/python/python-project-demo          #项目的工作目录
    wsgi-file=learning_log/wsgi.py            #指定项目中的wsgi.py配置文件
    daemonize=/var/log/uwsgi.log            #指定日志文件位置
    #processes=4    #指定启动进程的数目
    #master=true     #开启主进程管理模式

2)运行uWSGI

    [root@proxy python]# uwsgi --ini myproject.ini    #读取myproject.ini运行uWSGI

3)修改nginx配置文件,添加uWSGI转发

    [root@proxy python]# vim /usr/local/nginx/conf/nginx.conf
    ...
            location / {
                uwsgi_pass 127.0.0.1:8000;        #动态页面交给uWSGI
                include uwsgi_params;            #调用uWSGI配置文件
                root   html;
                index  index.html index.htm;
            }
    ...
    [root@proxy python]# /usr/local/nginx/sbin/nginx

测试

使用浏览器访问192.168.99.5

2 案例2:配置Nginx实现用IP测试灰度发布

2.1 问题

本案例要求不同IP的客户访问相同代理时,可以看到不同集群主机的内容

2.2 方案

创建不同集群,准备多台集群主机,通过$remote_addr变量识别不同客户机

2.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:

1)使用proxy主机在nginx配置中创建集群

    [root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
    http {    
    ...
        upstream s8001 {                    #测试集群1
            server 192.168.99.100:8001;
        }
        upstream s8002 {                    #测试集群2
            server 192.168.99.200:8002;
        }
        upstream default {                    #正常业务集群
            server 192.168.99.100:80;
            server 192.168.99.200:80;
        }
        server {
            listen       80;
            server_name  localhost;
    ...
        set $group "default";                    #定义变量$group,默认值default
        if ($remote_addr ~ "192.168.99.1"){        #如果客户机ip是99.1就访问集群1
            set $group s8001;
        }
        if ($remote_addr ~ "192.168.99.2"){        #如果客户机ip是99.2就访问集群1
            set $group s8002;
        }
            location / {
                proxy_pass http://$group;        #调用集群
                root   html;
                index  index.html index.htm;
            }
    ...
    }
    [root@proxy nginx]# sbin/nginx  -s reload

为web1新建nginx虚拟主机

    [root@web1 nginx]# vim /usr/local/nginx/conf/nginx.conf
    http {    
    ...
    server {
        listen 8001;
        server_name localhost;
        root html8001;
        index index.html;
    }
    ...
    }
    [root@proxy nginx]# sbin/nginx  -s reload
    [root@web1 nginx]# mkdir html8001
    [root@web1 nginx]# echo web1-8001 > html8001/index.html

为web2新建nginx虚拟主机

    [root@web2 nginx]# vim /usr/local/nginx/conf/nginx.conf
    http {
    ...
    server {
        listen 8002;
        server_name localhost;
        root html8002;
        index index.html;
    }
    ...
    }
    [root@proxy nginx]# sbin/nginx  -s reload
    [root@web2 nginx]# mkdir html8002
    [root@web2 nginx]# echo web1-8002 > html8002/index.html

2)测试

192.168.99.1访问192.168.99.5

192.168.99.2访问192.168.99.5

其他ip访问192.168.99.5

3 案例3:通过不同用户ID测试灰度发布

3.1 问题

不同ID的客户访问相同代理时,可以看到不同集群主机的内容

3.2 方案

使用php页面,定义不同匹配语句

3.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:

1)使用proxy主机,要先还原nginx,并配置可以解析动态网页

    [root@proxy nginx]# vim html/home.php        #修改php页面,将原有Welcome那行修改成以下状态
    Welcome :  <?php
    if(preg_match("/^abc/",$_SESSION['login_user'])) {        #preg_match匹配正则,如果登录账号是以abc开头,就连接99.100,否则连接99.200
    echo "<a href='http://192.168.99.100'>开始</a>";
    }
    else
    {
    echo "<a href='http://192.168.99.200'>开始</a>";
    }
    ?>

2)测试

浏览器访问192.168.99.5/index.php分别输入不同名称的账户,可以看到"开始"连接的是不同的地址,效果如图-1所示。

4 案例4:配置网站限流限速

4.1 问题

本案例要求配置nginx限流限速,效果如下:

  • 使用Nginx配置全局限速100k
  • 配置虚拟主机www.b.com限速200k,该网站根目录下的file_a目录中的所有数据限速300k,file_b目录中的所有数据不限速

4.2 方案

使用limit_rate指令限制速度

4.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:

1)定义limit_rate限制

    [root@web1 nginx]# vim /usr/local/nginx/conf/nginx.conf
    http {
    ...    
        limit_rate 100k;        #全局限速
        server {
            limit_rate 200k;            #虚拟主机限速
            listen 80;
            server_name www.b.com;
            root html;
            index index.html;
            location /file_a {
                limit_rate 300k;        #file_a目录限速300k
            }
            location /file_b {
                limit_rate 0k;            #file_b目录不限速
            }
        }

2)创建测试目录

    [root@web1 nginx]# mkdir html/file_a
    [root@web1 nginx]# mkdir html/file_b

3)创建测试文件

    [root@web1 nginx]# dd if=/dev/zero of=html/test.img  bs=100M count=1
    [root@web1 nginx]# dd if=/dev/zero of=html/file_a/test.img  bs=100M count=1
    [root@web1 nginx]# dd if=/dev/zero of=html/file_b/test.img  bs=100M count=1

下载测试

     wget www.a.com/test.img
     wget www.b.com/test.img
     wget www.b.com/file_a/test.img
     wget www.b.com/file_b/test.img

连接限制(非必须配置)

修改用户访问连接限制,使一个客户同时打开多个连接也无法突破限制

首先安装ngx_http_limit_conn_module模块

    http {
        limit_conn_zone $binary_remote_addr zone=addr:10m;        
        server {
    location /app {
    limit_rate 30k;     
    limit_conn addr 1 ;    
    }

5 防盗链

valid_referers指令可以检测被访问资源从哪个地址来

1)修改配置,添加防盗链测试语句

    [root@web1 nginx]# vim /usr/local/nginx/conf/nginx.conf
    server {
    ...    
        valid_referers  none 192.168.99.100;    #如果请求中的referer 头字段包含者地址是99.100或者没有referer 头字段则有效,
        if ($invalid_referer){                    #如果上述测试无效则条件成立
            return 403;                        #返回错误提示
        }
    ...
    }

2)web1编写测试页面

    [root@web1 nginx]# cat html/index.html
    web1
    测试页面  --
    <a href="http://192.168.99.100/nr.html">内容</a>
    [root@web1 nginx]# cat html/nr.html
    web1内容页面

3)web2编写测试页面

root@web2 nginx]# cat html/index.html
web2
测试页面  --
<a href="http://192.168.99.100/nr.html">内容</a>

4)测试,从192.168.99.100主页点内容可以访问,但从99.200点不可以

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/373018.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python程序设计 函数

简单函数 函数&#xff1a;就是封装了一段可被重复调用执行的代码块。通过此代码块可以实现大量代码的重复使用。 函数的使用包含两个步骤&#xff1a; 定义函数 —— 封装 独立的功能 调用函数 —— 享受 封装 的成果 函数的作用&#xff0c;在开发程序时&#xff0c;使用…

Unity3d Shader篇(一)— 顶点漫反射着色器解析

文章目录 前言一、顶点漫反射着色器是什么&#xff1f;1. 顶点漫反射着色器的工作原理 二、编写顶点漫反射着色器1. 定义属性2. 创建 SubShader3. 编写着色器程序段4. 完成顶点着色器5. 完成片段着色器 三、效果四、总结 前言 在 Unity 中&#xff0c;Shader 可以用来实现各种…

jmeter设置关联

一、为什么要设置关联&#xff1f; http协议本身是无状态的&#xff0c;客户端只需要简单向服务器请求下载某些文件&#xff0c;无论是客户端还是服务端都不去记录彼此过去的行为&#xff0c;每一次请求之间都是独立的。如果jmeter需要设置跨线程组脚本&#xff0c;就必须设置…

【问题篇】activiti工作流转办并处理备注问题

当处理activiti转办问题时&#xff0c;需要做的就是处理审批人和备注问题。 处理的思路是&#xff0c;先将当前环节标志成转办标签&#xff0c;再通过BUSINESS_KEY_找到流程实例的历史记录&#xff0c;找到最新的一条复制一份出来&#xff0c;表示需要转办到的人的历史记录并设…

APP专项测试方法总结

APP专项测试 1、网络测试 可使用抓包工具辅助网格测试推荐&#xff1a;fiddler&#xff0c;Charles 网络切换&#xff1a; 2G-3G-4G-wifi-网络信号差–无网 网络信号弱&#xff1a; 关注是否出现ANR、crash 2、中断测试 意外中断&#xff1a; 来电&#xff1b;短信&am…

不需英文基础也可以轻松学编程,中文编程开发工具免费版下载,编程工具构件箱之扩展控制面板构件用法

不需英文基础也可以轻松学编程&#xff0c;中文编程开发工具免费版下载&#xff0c;编程工具构件箱之扩展控制面板构件用法 一、前言 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载——常…

ShardingSphere 5.x 系列【3】分库分表中间件技术选型

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 前言2. My Cat3. ShardingSphe…

C++ 类与对象(下)

目录 1. 再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表 1.3 explicit关键字 2. static成员 2.1 概念 2.2 特性 3.友元 3.1友元函数 3.2 友元类 4. 内部类 5.匿名对象 6.拷贝对象时的一些编译器优化 7. 再次理解类和对象 【本节目标】 1. 再谈构造函数 2. Static成员…

【产品升级】SmartPipe升级到版本2.0

在近一个月的攻关和测试下&#xff0c;SmartPipe软件轴线自动识别算法的性能大幅提升&#xff0c;鲁棒性和稳定性进一步增强。近一年来客户累计反馈的多种复杂管路&#xff08;包括带有支管管路、带有压瘪段管路、推弯管、装配管、带有复杂孔洞管路等&#xff09;现在均能够正确…

通过消息队列实现进程之间通信代码

#include <myhead.h> struct msgbuf {long int mtype; char mtext[1024]; }; //定义一个消息大小 #define MSGSIZE sizeof(struct msgbuf)-sizeof(long int) int main(int argc, const char *argv[]) {//1、创建key值以便创建消息队列key_t key ftok("/", k)…

Bootstrap5 图片轮播

Bootstrap5 轮播样式表使用的是CDN资源 <title>亚丁号</title><!-- 自定义样式表 --><link href"static/front/css/front.css" rel"stylesheet" /><!-- 新 Bootstrap5 核心 CSS 文件 --><link rel"stylesheet"…

STM32WLE5JC

Sub-GHz 无线电介绍 sub-GHz无线电是一种超低功耗sub-GHz无线电&#xff0c;工作在150-960MHz ISM频段。 在发送和接收中采用LoRa和&#xff08;G&#xff09;FSK调制&#xff0c;仅在发送中采用BPSK/(G)MSK调制&#xff0c;可以在距离、数据速率和功耗之间实现最佳权衡。 这…

freeswitch对接FunASR实时语音听写

1、镜像启动 通过下述命令拉取并启动FunASR软件包的docker镜像&#xff1a; sudo docker pull \registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.7 mkdir -p ./funasr-runtime-resources/models sudo docker run -p 10096:10095 -i…

【Gephi项目实战-带数据集】利用gephi绘制微博肖战超话120位用户关系图,并计算整体网络指标与节点指标

数据集在评论区&#xff0c;B站演示视频在评论区&#xff01; 简介 最近2天需要用到gephi做社会网络分析&#xff0c;于是从0开始接触gephi并摸索出了gephi的基本使用指南。下面将结合真实的节点文件与边文件&#xff0c;利用gephi绘制社会网络并计算相关测量指标。整个过程会…

我们都是宇宙的奇迹

我们都是独一无二的个体&#xff0c;是宇宙的奇迹 如果我不关注自我&#xff0c;那我在这个宏大的宇宙中有什么意义&#xff1f; 关于你的问题&#xff0c;我想没有一个简单的答案&#xff0c;因为不同的人可能有不同的看法和感受。有些人可能认为&#xff0c;如果不关注自我&…

jbdc的简单了解

JDBC JDBC所处的位置 JDBC的本质 Java操作数据库的一套接口。 补充 ddl:数据库定义语言,例如建表,创建数据库等。 dml:数据库操作语言,例如增删改。 dql:数据库查询语言,例如查询语句。 注意 在创建Java项目后的第一个步骤是导入jar包。 导入jar包的步骤 1 创建l…

【C语言】const修饰指针的不同作用

目录 const修饰变量 const修饰指针变量 ①不用const修饰 ②const放在*的左边 ③const放在*的右边 ④*的左右两边都有const 结论 const修饰变量 变量是可以修改的&#xff0c;如果把变量的地址交给⼀个指针变量&#xff0c;通过指针变量的也可以修改这个变量。 但…

TCP/IP详细介绍以及TCP/IP寻址

目录 ​编辑 1. TCP/IP 介绍 2. 计算机通信协议&#xff08;Computer Communication Protocol&#xff09; 3. 什么是 TCP/IP&#xff1f; 4. 在 TCP/IP 内部 5. TCP 使用固定的连接 6. IP 是无连接的 7. IP 路由器 8. TCP/IP 9. TCP/IP 寻址 10. IP地址 …

LeetCode、1137. 第 N 个泰波那契数【简单,动态规划】

文章目录 前言LeetCode、1137. 第 N 个泰波那契数【简单&#xff0c;动态规划】题目与分类思路一维动态规划 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术…

记录下ibus-libpinyin输入法的重新安装

目前的版本为: 首先把现在的ibus-libpinyin卸了 sudo apt-get --purge remove ibus-libpinyin sudo apt-get autoremove 安装教程请参考 Installation libpinyin/ibus-libpinyin Wiki GitHub yilai sudo apt install pkg-config sudo apt-get install libglib2.0-de…