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

Top

NSD OPERATION DAY07

  1. 案例1:部署Python网站项目
  2. 案例2:配置Nginx实现用IP测试灰度发布
  3. 案例3:通过不同用户ID测试灰度发布
  4. 案例4:配置网站限流限速
  5. 防盗链

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

1.1 问题

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

1.2 方案

安装Python工具及依赖

安装uWSGI并编写配置文件

1.3 步骤

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

步骤一:

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

1)安装python依赖软件

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

2)安装项目依赖

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

3)测试项目

  1. [root@proxy python]# tar -xf python-project-demo.tar.gz
  2. [root@proxy python]# cd python-project-demo/
  3. [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文件中的特效注释

  1. <!-- {% bootstrap_css %}
  2. {% bootstrap_javascript %}
  3. -->

步骤二:

1)安装uWSGI

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

2)运行uWSGI

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

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

  1. [root@proxy python]# vim /usr/local/nginx/conf/nginx.conf
  2. ...
  3. location / {
  4. uwsgi_pass 127.0.0.1:8000;        #动态页面交给uWSGI
  5. include uwsgi_params;            #调用uWSGI配置文件
  6. root html;
  7. index index.html index.htm;
  8. }
  9. ...
  10. [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配置中创建集群

  1. [root@proxy nginx]# vim /usr/local/nginx/conf/nginx.conf
  2. http {
  3. ...
  4. upstream s8001 {                    #测试集群1
  5. server 192.168.99.100:8001;
  6. }
  7. upstream s8002 {                    #测试集群2
  8. server 192.168.99.200:8002;
  9. }
  10. upstream default {                    #正常业务集群
  11. server 192.168.99.100:80;
  12. server 192.168.99.200:80;
  13. }
  14. server {
  15. listen 80;
  16. server_name localhost;
  17. ...
  18. set $group "default";                    #定义变量$group,默认值default
  19. if ($remote_addr ~ "192.168.99.1"){        #如果客户机ip是99.1就访问集群1
  20. set $group s8001;
  21. }
  22. if ($remote_addr ~ "192.168.99.2"){        #如果客户机ip是99.2就访问集群1
  23. set $group s8002;
  24. }
  25. location / {
  26. proxy_pass http://$group;        #调用集群
  27. root html;
  28. index index.html index.htm;
  29. }
  30. ...
  31. }

为web1新建nginx虚拟主机

  1. [root@web1 nginx]# vim /usr/local/nginx/conf/nginx.conf
  2. http {
  3. ...
  4. server {
  5. listen 8001;
  6. server_name localhost;
  7. root html8001;
  8. index index.html;
  9. }
  10. ...
  11. }
  12. [root@web1 nginx]# mkdir html8001
  13. [root@web1 nginx]# echo web1-8001 > html8001/index.html

为web2新建nginx虚拟主机

  1. [root@web2 nginx]# vim /usr/local/nginx/conf/nginx.conf
  2. http {
  3. ...
  4. server {
  5. listen 8002;
  6. server_name localhost;
  7. root html8002;
  8. index index.html;
  9. }
  10. ...
  11. }
  12. [root@web2 nginx]# mkdir html8002
  13. [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,并配置可以解析动态网页

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

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限制

  1. [root@web1 nginx]# vim /usr/local/nginx/conf/nginx.conf
  2. http {
  3. ...
  4. limit_rate 100k;        #全局限速
  5. server {
  6. limit_rate 200k;            #虚拟主机限速
  7. listen 80;
  8. server_name www.b.com;
  9. root html;
  10. index index.html;
  11. location /file_a {
  12. limit_rate 300k;        #file_a目录限速300k
  13. }
  14. location /file_b {
  15. limit_rate 0k;            #file_b目录不限速
  16. }
  17. }

2)创建测试目录

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

3)创建测试文件

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

下载测试

  1. wget www.a.com/test.img
  2. wget www.b.com/test.img
  3. wget www.b.com/file_a/test.img
  4. wget www.b.com/file_b/test.img

连接限制(非必须配置)

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

首先安装ngx_http_limit_conn_module模块

  1. http {
  2. limit_conn_zone $binary_remote_addr zone=addr:10m;
  3. server {
  4. location /app {
  5. limit_rate 30k;
  6. limit_conn addr 1 ;
  7. }

5 防盗链

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

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

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

2)web1编写测试页面

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

3)web2编写测试页面

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一种高级、通用、解释型的编程语言,由Guido van Rossum于1989年发起,1991年正式发布。Python以简洁而清晰的语法著称,强调代码的可读性和易于维护。以下是Python的一些主要特点和优势: 易学易用: Python的语法设计简单直观,更接近自然语言,使初学者更容易上手。这种易学易用的特性促使了Python在教育领域和初学者中的广泛应用。 高级语言: Python是一种高级编程语言,提供了自动内存管理(垃圾回收)等功能,减轻了程序员的负担,同时具有动态类型和面向对象的特性。 跨平台性: Python具有很好的跨平台性,可以在多个操作系统上运行,包括Windows、Linux、macOS等,使得开发的代码可以轻松迁移。 丰富的标准库: Python内置了大量的模块和库,涵盖了文件操作、网络编程、数据库访问等各个方面。这些标准库使得开发者能够快速构建功能丰富的应用程序。 开源: Python是开源的,任何人都可以免费使用并查看源代码。这种开放性促进了Python社区的发展,使得有大量的第三方库和框架可供使用。 强大的社区支持: Python拥有庞大而活跃的开发社区,这使得开发者可以轻松获取帮助、分享经验,并参与到Python的发展中。 适用于多个领域: Python在各种领域都有广泛的应用,包括Web开发、数据科学、人工智能、自动化测试、网络编程等。特别是在数据科学和人工智能领域,Python成为了主流的编程语言之一。 支持面向对象编程: Python支持面向对象编程,允许开发者使用类和对象的概念,提高了代码的重用性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值