Nginx基础(06)

Nginx基础(05)

uWSGI

  • 介绍

    • uWSGI 是一个 Web服务器

    • 主要用途是将Web应用程序部署到生产环境中

    • 可以用来连接Nginx服务与Python动态网站

1. 用 uWSGI 部署 Python 网站项目

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

  • 安装 python 工具及依赖

  • 安装 uWSGI 并编写配置文件

安装 python 工具及依赖
1) 安装python 依赖软件

gcc make python3 python3-devel

2) 安装项目依赖

[root@proxy python]#

pip3 install  pytz-2022.6-py2.py3-none-any.whl
pip3 install  Django-1.11.8-py2.py3-none-any.whl
pip3 install  django-bootstrap3-11.0.0.tar.gz
3) 测试项目

[root@proxy python]#

tar -xf python-project-demo.tar.gz
cd 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 %}
    -->
安装 uWSGI 并修改配置文件
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

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

想访问静态页面实现动静分离 , 则添加新的location组

location /static {
    root   html;
}
           
mkdir /usr/local/nginx/html/static
echo "静态" > /usr/local/nginx/html/static/a.html

测试

使用浏览器访问192.168.99.5/static/a.html

灰度发布 / 金丝雀发布

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

  • 主要作用

    • 及时发现项目问题

    • 尽早获取用户反馈信息 , 以改进产品

    • 如果项目有问题 , 可以将问题影响控制到最小范围

1.配置Nginx实现用IP测试灰度发布

  • 不同IP的客户访问相同代理时 , 可以看到不同集群主机的内容
  • 创建不同集群 , 准备多台集群主机 , 通过 $remote_addr 变量识别不同客户机
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
2) web1 新建 nginx 虚拟主机
vim /usr/local/nginx/conf/nginx.conf
http {    
...
server {
    listen 8001;
    server_name localhost;
    root html8001;
    index index.html;
}
...
}

sbin/nginx  -s reload
mkdir html8001
echo web1-8001 > html8001/index.html
3) web2 新建 nginx 虚拟主机
vim /usr/local/nginx/conf/nginx.conf
http {
...
server {
    listen 8002;
    server_name localhost;
    root html8002;
    index index.html;
}
...
}

sbin/nginx  -s reload

mkdir html8002
echo web1-8002 > html8002/index.html
4) 测试
192.168.99.1访问192.168.99.5

192.168.99.2访问192.168.99.5

其他ip访问192.168.99.5
2. 通过不同用户ID测试灰度发布
  • 不同ID的客户访问相同代理时 , 可以看到不同集群主机的内容
  • 使用php页面 , 定义不同匹配语句
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>";
    }
    ?>

访问限制

  • 需求
    • 需要共享的文件数量较大较多
    • 服务器自身宽带有限
    • 频繁遭受黑客攻击
    • 业务利益最大化
  • 配置 nginx 限流限速
    • 使用 Nginx 配置全局限速 100k
    • 配置虚拟主机 www.b.com 限速200k
    • 该网站根目录下的 file_a 目录中的所有数据限速 300k
    • file_b 目录下的数据不限速
  • 使用 limit_rate 指令限制速度
    • [ limit_rate 10K ] 限制速度是 10K
    • [ limit_rate_after 10m ] 定义10m数据以上开启限速
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) 创建测试目录 */html/file_{a,b}
3) 创建测试文件并测试
dd if=/dev/zero of=html/test.img  bs=100M count=1
  • dd 命令用于 读取 , 转换并输出数据
    • dd 可从标准输入或文件中读取数据 , 根据指定的格式来转换数据 , 再输出到文件 , 设备或标准输出.
    • if=文件名a 输入文件名 , 缺省为标准输入 , 即指定源文件
    • of=文件名b 输入文件名 , 缺省为标准输出 , 即指定目的文件
    • bs=bytes read and write up to Bytes bytes at a time
    • count=N copy only N input blocks

下载测试

 wget www.a.com/test.img
4) 连接限制(非必须配置)

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

首先安装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 ;    
}

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

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

相关文章

AutoMQ 登顶 Hacker News: 开源项目流量的第一桶金以及经验分享

01 事件回顾 2024 年 4 月 8 日中午&#xff0c;随着 AutoMQ 的一则简短的标题内容&#xff1a;Show HN: AutoMQ - A Cost-Effective Kafka Distro That Can Autoscale in Seconds[1] 成功登顶 Hacker News &#xff08;HN&#xff09; &#xff0c;我们迎来了大量优质、精准的…

为什么一开始不被看好的单片机,现在概括了所有数据产品行业?

这主要归因于技术和认知的局限。 在其发展初期&#xff0c;单片机的性能、存储容量以及开发工具都颇为有限&#xff0c;难以契合复杂应用的种种需求。彼时&#xff0c;许多人确实难以洞察到它的未来走向。 然而&#xff0c;时过境迁&#xff0c;人们逐步领悟到了单片机在各个…

密码学 | 椭圆曲线数字签名方法 ECDSA(下)

目录 10 ECDSA 算法 11 创建签名 12 验证签名 13 ECDSA 的安全性 14 随机 k 值的重要性 15 结语 ⚠️ 原文&#xff1a;Understanding How ECDSA Protects Your Data. ⚠️ 写在前面&#xff1a;本文属于搬运博客&#xff0c;自己留着学习。同时&#xff0c;经过几…

部署Zabbix代理服务器

目录 1.准备环境 2.设置 zabbix 的下载源 3.安装 zabbix 所需的数据库 3.1添加数据库用户&#xff0c;以及 zabbix 所需的数据库信息 3.2导入数据库信息 4.修改 zabbix-proxy 配置文件 5.启动 zabbix-proxy 6.在所有主机上配置 hosts 解析 7.在 Web 页面配置 agent 代…

市面上加密混淆软件的比较和推荐

引言 市面上有许多加密混淆软件可供开发者使用&#xff0c;但哪些软件是最好用的&#xff1f;哪些软件受到开发者的喜爱&#xff1f;本文将根据一次在CSDN上的投票结果&#xff0c;为大家介绍几款在程序员中普及度较高的加密软件。以下是投票结果&#xff0c;希望能对大家的选择…

什么是组网?如何远程组网?

在当今数字化时代&#xff0c;组网已成为企业提高工作效率、节省时间和成本的关键技术。组网是将多台计算机或其他网络设备连接起来&#xff0c;形成一个互联互通的网络系统。本文将概述组网的主要目的、实现方式及其价值&#xff0c;并深入分析远程组网策略。 1. 组网目的与价…

BK9531 BK9532上海博通BEKEN 提供开发资料

.概述 BK9531/BK9532 芯片是用于无线高品质语音传输的芯片组&#xff0c;包括发射芯片BK9531 和接收芯片 BK9532&#xff0c;每个芯片覆盖频段范围为&#xff1a;V 段160~270MHz 和 U 段500~980MHz。 BK9531/BK9532 采用数字调制和高性能音频 ADC 和 DAC&#xff0c;配合极低延…

idea2023专业版安装破解+maven配置教程

前言 上一篇文章已经介绍了maven在Win10系统的安装配置教程。基于Win10的maven配置环境&#xff0c;本篇文章将介绍idea2023的安装破解教程及maven在idea2023的配置教程&#xff08;同时会将maven在idea2023的配置教程内容补充至上一篇文章&#xff09;。 一、idea2023下载安…

再也不想用丑东西了!一个高颜值的备忘录,分享给你们【文末领源码】

谁工作中不得有点丢三落四的&#xff0c;但是被老大点名批评确实有点过不去了&#xff0c;提醒小伙伴们把必要的事情挂出来&#xff0c;同事说虽然已经有一款系统&#xff0c;但展示的不好看&#xff0c;根本不想用&#xff0c;于是找到了一款颜值还不错的备忘录工具 -- memo …

工作的第五天了

1.今天内容 1.现在的基本都增删改查都有 2.下一步做规格商品添加规格的方式 3.商品规格比较特殊 4.我们添加一个商品。通用一个商品&#xff0c;然后下面添加规格信息 5.如何做 6.第一个是添加商品 7.商品对应多个属性方式&#xff0c;简单来说是一个一对多的方式&#x…

WPF Extended.Wpf.Toolkit 加载界面

1、NuGet 中安装 Extended.Wpf.Toolkit 。 2、在MainWindow.xaml中添加xmlns:tk"http://schemas.xceed.com/wpf/xaml/toolkit" 。 MainWindow.xaml 代码如下。 <Window x:Class"WPF_Extended_Wpf_Toolkit_Loading.MainWindow" xmlns"ht…

基于ssm酒吧存酒系统论文

摘 要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱。本次开发一套酒吧存酒系统有管理员和用户两…

Adobe联手OpenAI,AI视频编辑新功能震撼上线!

Adobe 尝试与 OpenAI 合作以添加AI工具 前言 就在北京时间4月15日 &#xff0c; Adobe准备开辟制作软件的新道路&#xff0c;该公司正处于允许第三方生成式人工智能工具&#xff08;如OpenAI的Sora等&#xff09;进入其广泛使用的视频编辑软件的早期阶段。那么这次Adobe与OpenA…

MathJax —— Vue3的使用方法

版本&#xff1a; mathjax3 需要实现效果 一、使用方式 1. index.html 中引入 <!-- 识别单行&#xff0c;行内&#xff0c;\( \)样式的公式 --><script>MathJax {tex: {inlineMath: [[$, $],[$$, $$], [\\(, \\)]]},};</script><script id"MathJ…

国外新闻媒体稿件宣发:海外pr发稿干货秘籍-大舍传媒

一、了解目标市场和受众 发布新闻稿件的首要步骤是了解你的目标市场和受众。在撰写新闻稿件之前&#xff0c;你需要研究你的目标市场&#xff0c;了解他们的需求、兴趣和习惯。你还需要了解你的受众&#xff0c;包括他们的年龄、性别、职业、地理位置和媒体使用习惯等。这些信…

Shell——执行方式详解

一.什么是shell Shell 是一个计算机程序&#xff0c;它提供了用户与操作系统内核之间的交互界面。它接受来自用户或其他程序的命令&#xff0c;并将其转换为操作系统能理解的形式&#xff0c;然后执行这些命令并将结果返回给用户或程序。 Shell 在操作系统中扮演着重要的角色…

负载均衡集群——Nginx

目录 1.Nginx反向代理实战 2.Nginx 反向代理和负载均衡实践 实验操作步骤 步骤 1 Nginx1 和 Nginx2 配置 步骤2 测试资源是否可用 步骤 3 安装和配置 Nginx 代理 步骤 4 代理服务器配置检测 步骤 5 在 Nginx1 和 Nginx2 配置虚拟主机 步骤 6 将虚拟主机添加入后端主机组…

鸿蒙南向开发:【编译和烧录】指导

编译 #进入源码目录 #rm -rf ohos_config.json #hb set #. #如下图所示,按↑↓键&#xff0c;选择需要编译的工程名&#xff0c;然后回车 #hb build -f #然后回车&#xff0c;等待屏幕出现&#xff1a;BUILD SUCCESS字样&#xff0c;说明编译成功。如下图 #编译生成的固件在…

OpenHarmony轻量系统开发【7】驱动之I2C显示OLED屏幕

7.1实验效果 Hispark WiFi开发套件又提供一个oled屏幕&#xff0c;但是鸿蒙源码中没有这个屏幕的驱动&#xff0c;我们需要自己去移植。 以下是移植效果&#xff1a; 接口&#xff1a;I2C 使用引脚&#xff1a;HI_IO_NAME_GPIO_13 、 HI_IO_NAME_GPIO_14 7.2代码 这里我直…

TiDB存储引擎TiKV揭秘

目录 一、TiKV 介绍 二、RocksDB 三、TiKV 与 RocksDB 架构 3.1 用户数据保存 3.2 TiKV 中 Region 一、TiKV 介绍 TiKV 是一个分布式事务型的键值数据库&#xff0c;提供了满足 ACID 约束的分布式事务接口&#xff0c;并且通过 Raft 协议保证了多副本数据一致性以及高可用。…
最新文章