当前位置: 首页 > news >正文

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;        #动态页面交给uWSGIinclude 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.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
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 reloadmkdir html8002
echo web1-8002 > html8002/index.html
4) 测试
192.168.99.1访问192.168.99.5192.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 :  <?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>";}?>

访问限制

  • 需求
    • 需要共享的文件数量较大较多
    • 服务器自身宽带有限
    • 频繁遭受黑客攻击
    • 业务利益最大化
  • 配置 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.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) 创建测试目录 */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 ;    
}

相关文章:

Nginx基础(06)

Nginx基础&#xff08;05&#xff09; uWSGI 介绍 uWSGI 是一个 Web服务器 主要用途是将Web应用程序部署到生产环境中 可以用来连接Nginx服务与Python动态网站 1. 用 uWSGI 部署 Python 网站项目 配置 Nginx 使其可以将动态访问转交给 uWSGI 安装 python 工具及依赖 安…...

【Qt 学习笔记】QWidget的windowOpacity属性 | cursor属性 | font属性

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ QWidget的windowOpacity属性 | cursor属性 | font属性 文章编号&#…...

Python爬虫:requests模块的基本使用

学习目标&#xff1a; 了解 requests模块的介绍掌握 requests的基本使用掌握 response常见的属性掌握 requests.text和content的区别掌握 解决网页的解码问题掌握 requests模块发送带headers的请求掌握 requests模块发送带参数的get请求 1 为什么要重点学习requests模块&…...

C++traits

traits C的标准库提供了<type_traits>,它定义了一些编译时基于模板类的接口用于查询、修改类型的特征&#xff1a;输入的时类型&#xff0c;输出与该类型相关的属性 通过type_traits技术编译器可以回答一系列问题&#xff1a;它是否为数值类型&#xff1f;是否为函数对象…...

gitee和idea集成

1 集成插件 2 配置账号密码 3 直接将项目传到仓库 4直接从gitee下载项目...

阿维·威格德森(Avi Wigderson)研究成果对人工智能领域的应用有哪些影响

AI人工智能的影响 威格德森&#xff08;Avi Wigderson&#xff09;的研究成果对人工智能领域的应用产生了深远的影响。 首先&#xff0c;威格德森在计算复杂性理论、算法和优化方面的贡献为人工智能领域提供了高效、准确的计算模型和算法。他的研究帮助我们更好地理解计算问题…...

【免费领取源码】可直接复用的医院管理系统!

今天给大家分享一套基于SpringbootVue的医院管理系统源码&#xff0c;在实际项目中可以直接复用。(免费提供&#xff0c;文中自取) 系统运行图&#xff08;设计报告和接口文档&#xff09; 1、后台管理页面 2、排班管理页面 3、设计报告包含接口文档 源码免费领取方式 后台私信…...

leetcode代码记录(全排列 II

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a; [[1,1,2], [1,2,1], [2,1…...

【数据结构与算法】之双向链表及其实现!

​ 个人主页&#xff1a;秋风起&#xff0c;再归来~ 数据结构与算法 个人格言&#xff1a;悟已往之不谏&#xff0c;知来者犹可追 克心守己&#xff0c;律己则安&#xff01; 目录 1、双向链表的结构及概念 2、双向链表的实现 2.1 要实现的接口…...

记一次奇妙的某个edu渗透测试

前话&#xff1a; 对登录方法的轻视造成一系列的漏洞出现&#xff0c;对接口确实鉴权造成大量的信息泄露。从小程序到web端网址的奇妙的测试就此开始。&#xff08;文章厚码&#xff0c;请见谅&#xff09; 1. 寻找到目标站点的小程序 进入登录发现只需要姓名加学工号就能成功…...

设计模式学习笔记 - 设计模式与范式 -总结:1.回顾23中设计模式的原理、背后的思想、应用场景等

1.创建型设计模式 创建型设计模式包括&#xff1a;单例模式、工厂模式、建造者模式、原型模式。它主要解决对象的创建问题&#xff0c;封装复杂的创建过程&#xff0c;解耦对象的创建代码和使用代码。 1.单例模式 单例模式用来创建全局唯一的对象。一个类只允许创建一个对象…...

22 文件系统

了解了被打开的文件&#xff0c;肯定还有没被打开的文件&#xff0c;就是磁盘上的文件。先从磁盘开始认识 磁盘 概念 内存是掉电易失存储介质&#xff0c;磁盘是永久性存储介质 磁盘的种类有SSD&#xff0c;U盘&#xff0c;flash卡&#xff0c;光盘&#xff0c;磁带。磁盘是…...

OVITO-2.9版本

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩&#xff01; 主要专栏内容包括&#xff1a; †《LAMMPS小技巧》&#xff1a; ‾ \textbf…...

【Java开发指南 | 第一篇】类、对象基础概念及Java特征

读者可订阅专栏&#xff1a;Java开发指南 |【CSDN秋说】 文章目录 类、对象基础概念Java特征 Java 是一种面向对象的编程语言&#xff0c;它主要通过类和对象来组织和管理代码。 类、对象基础概念 类&#xff1a;类是一个模板&#xff0c;它描述一类对象的行为和状态。例如水…...

Neo4j 图形数据库中有哪些构建块?

Neo4j 图形数据库具有以下构建块 - 节点属性关系标签数据浏览器 节点 节点是 Graph 的基本单位。 它包含具有键值对的属性&#xff0c;如下图所示。 NEmployee 节点 在这里&#xff0c;节点 Name "Employee" &#xff0c;它包含一组属性作为键值对。 属性 属性是…...

002 springboot整合mybatis-plus

文章目录 TestMybatisGenerate.javapom.xmlapplication.yamlReceiveAddressMapper.xmlreceive_address.sqlReceiveAddress.javaReceiveAddressMapper.javaIReceiveAddressServiceReceiveAddressServiceImpl.javaReceiveAddressController.javaTestAddressService.javaSpringboo…...

代码随想录训练营第三十五期|第天16|二叉树part03|104.二叉树的最大深度 ● 111.二叉树的最小深度● 222.完全二叉树的节点个数

104. 二叉树的最大深度 - 力扣&#xff08;LeetCode&#xff09; 递归&#xff0c;可以前序遍历&#xff0c;也可以后序遍历 前序遍历是backtracking 下面是后序遍历的代码&#xff1a; /*** Definition for a binary tree node.* public class TreeNode {* int val;* …...

Mac版2024 CleanMyMac X 4.15.2 核心功能详解 cleanmymac这个软件怎么样?cleanmymac到底好不好用?

近些年伴随着苹果生态的蓬勃发展&#xff0c;越来越多的用户开始尝试接触Mac电脑。然而很多人上手Mac后会发现&#xff0c;它的使用逻辑与Windows存在很多不同&#xff0c;而且随着使用时间的增加&#xff0c;一些奇奇怪怪的文件也会占据有限的磁盘空间&#xff0c;进而影响使用…...

【华为OD机试】执行任务赚积分【C卷|100分】

题目描述 现有N个任务需要处理&#xff0c;同一时间只能处理一个任务&#xff0c;处理每个任务所需要的时间固定为1。 每个任务都有最晚处理时间限制和积分值&#xff0c;在最晚处理时间点之前处理完成任务才可获得对应的积分奖励。 可用于处理任务的时间有限&#xff0c;请问在…...

mybatis分页实现总结

1.mybatis拦截器相关知识 1.作用 mybatis的拦截器是mybatis提供的一个拓展机制&#xff0c;允许用户在使用时根据各自的需求对sql执行的各个阶段进行干预。比较常见的如对执行的sql进行监控&#xff0c;排查sql的执行时间&#xff0c;对sql进行拦截拼接需要的场景&#xff0c…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...

书籍“之“字形打印矩阵(8)0609

题目 给定一个矩阵matrix&#xff0c;按照"之"字形的方式打印这个矩阵&#xff0c;例如&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为&#xff1a;1&#xff0c;…...