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;        #动态页面交给uWSGIinclude 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.confhttp {    ...upstream s8001 {                    #测试集群1server 192.168.99.100:8001;}upstream s8002 {                    #测试集群2server 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,默认值defaultif ($remote_addr ~ "192.168.99.1"){        #如果客户机ip是99.1就访问集群1set $group s8001;}if ($remote_addr ~ "192.168.99.2"){        #如果客户机ip是99.2就访问集群1set $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.confhttp {    ...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.confhttp {...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 :  <?phpif(preg_match("/^abc/",$_SESSION['login_user'])) {        #preg_match匹配正则,如果登录账号是以abc开头,就连接99.100,否则连接99.200echo "<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.confhttp {...    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.imgwget www.b.com/test.imgwget www.b.com/file_a/test.imgwget 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.confserver {...    valid_referers  none 192.168.99.100;    #如果请求中的referer 头字段包含者地址是99.100或者没有referer 头字段则有效,if ($invalid_referer){                    #如果上述测试无效则条件成立return 403;                        #返回错误提示}...}

2)web1编写测试页面

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

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点不可以

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

D2076——低压立体声耳机放大电路,适用于便携式小型收音机或立体声耳机作双通道或BIL应用,外接元件少,采用SOP8封装

D2076是一块双通道音频功率放大器&#xff0c;最低工作电压可到1.0V. 适用于便携式小型收音机或立体声耳机作双通道或BIL应用。 主要特点&#xff1a; ● BTL工作 Po90mW (典型值)。 ● 外接元件少 ● 通过外接晶体管作为耳机功率放大。 ● 工作电压低 (1.0V最小值)。 ● 工…

【计算机网络】Socket的SO_REUSEADDR选项与TIME_WAIT

SO_REUSEADDR用于设置套接字的地址重用。当一个套接字关闭后&#xff0c;它的端口可能会在一段时间内处于TIME_WAIT状态&#xff0c;此时无法立即再次绑定相同的地址和端口。使用SO_REUSEADDR选项可以允许新的套接字立即绑定到相同的地址和端口&#xff0c;即使之前的套接字仍处…

地理空间分析10——空间数据分析中的地理编码与Python

目录 写在开头1. 地理编码基础1.1 地理编码的基本原理1.1.1 坐标系统1.1.2 地名解析1.1.3 编码算法1.2 Python中使用地理编码的基础知识1.2.1 百度地图API1.2.2 高德地图API1.2.3 腾讯地图API1.3 Python中实现代码2. 逆地理编码2.1 利用Python进行逆地理编码2.1.1 获取高德地图…

使用Java实现HTTP持久连接:一次与网络的“长聊“

大家都知道&#xff0c;传统的HTTP连接就像是一次性的餐具&#xff0c;每发送一个请求&#xff0c;就得重新建立一个连接&#xff0c;然后快速用完就扔。这对于网络资源来说&#xff0c;简直就是一场"大肆挥霍"的派对。但幸好&#xff0c;我们有HTTP持久连接&#xf…

8、应急响应-战前溯源反制主机蜜罐系统HFishHIDSElkeidWazuh

用途&#xff1a;个人学习笔记&#xff0c;欢迎指正 目录 背景&#xff1a; 一、潮源反制-平台部署-蜜罐-Hfish 二、溯源反制-平台部署-HIDS-Wazuh 三、溯源反制-平台部署-HlDS-Elkeid-hub 背景&#xff1a; 攻击者对服务器存在着各种威胁行为&#xff0c;作为安全人员&am…

解决:ModuleNotFoundError: No module named ‘torchvision’

解决&#xff1a;ModuleNotFoundError: No module named ‘torchvision’ 文章目录 解决&#xff1a;ModuleNotFoundError: No module named torchvision背景报错问题报错翻译报错位置代码报错原因解决方法方法一&#xff0c;直接安装方法二&#xff0c;手动下载安装方法三&…

Mongodb安装Linux

确定你的CentOS 版本 使用以下命令: /etc/centos-release下载Mongodb 解压tgz压缩包 创建data和log文件夹 , 确定你的文件夹访问权限 在log文件夹里面创建mongodb.log文件(这一步很重要 ! ! !) touch mongodb.log创建mongodb.conf文件 在你的mongodb文件夹下 vi mongo…

color - 让你的输出带点颜色

color color 是一个可以让你输出带颜色文本的库。 安装 go get github.com/fatih/color示例 输出到控制台 // 这会直接输出到控制台 color.Cyan("Prints text in cyan.")// 每个调用末尾会自动加上换行 color.Blue("Prints %s in blue.", "text&…

使用orangepi玩linux

最近看了这个大佬的文章&#xff0c;写了使用远程来挂载linux的方案&#xff0c;觉得还是很有意思的&#xff0c;瞬间感觉linux这块都还是相通的&#xff0c;就跑了一下&#xff0c;果然&#xff0c;牛逼&#xff01; 香橙派全志H3烧录Uboot&#xff0c;远程加载zImage&#xf…

羊奶指南又跟新了,又有新发现

羊奶指南又跟新了&#xff0c;又有新发现 羊奶源远流长&#xff0c;早在古代我们祖先就意识到了它的药用价值。在《本草纲目》一书中&#xff0c;药圣李时珍明确指出了羊奶的珍贵之处&#xff0c;为后人留下了宝贵的知识。本文将以科学的角度详细解读羊奶的药用价值&#xff0…

分享个前端工具-取色调色工具

这里虽然贴了两个&#xff0c;但推荐 Pipette. PipetteWin22.10.22.zip: https://download.csdn.net/download/rainyspring4540/88799632 图标&#xff1a; 界面&#xff1a; ColorPix https://download.csdn.net/download/rainyspring4540/88799642 图标&#xff1a; 界面…

HBase介绍

一、HBase简介 1.1、HBase是什么 Google在200-2006发表了GFS、MapReduce、BigTable三篇 论文 &#xff0c;号称“三驾马车”&#xff0c;开启了大数据的时代。 GFS是Google File System&#xff0c;开源实现是HDFS&#xff08;Hadoop File System&#xff09;。 MapReduce…