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基础(05) uWSGI 介绍 uWSGI 是一个 Web服务器 主要用途是将Web应用程序部署到生产环境中 可以用来连接Nginx服务与Python动态网站 1. 用 uWSGI 部署 Python 网站项目 配置 Nginx 使其可以将动态访问转交给 uWSGI 安装 python 工具及依赖 安…...
【Qt 学习笔记】QWidget的windowOpacity属性 | cursor属性 | font属性
博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ QWidget的windowOpacity属性 | cursor属性 | font属性 文章编号&#…...
Python爬虫:requests模块的基本使用
学习目标: 了解 requests模块的介绍掌握 requests的基本使用掌握 response常见的属性掌握 requests.text和content的区别掌握 解决网页的解码问题掌握 requests模块发送带headers的请求掌握 requests模块发送带参数的get请求 1 为什么要重点学习requests模块&…...
C++traits
traits C的标准库提供了<type_traits>,它定义了一些编译时基于模板类的接口用于查询、修改类型的特征:输入的时类型,输出与该类型相关的属性 通过type_traits技术编译器可以回答一系列问题:它是否为数值类型?是否为函数对象…...
gitee和idea集成
1 集成插件 2 配置账号密码 3 直接将项目传到仓库 4直接从gitee下载项目...
阿维·威格德森(Avi Wigderson)研究成果对人工智能领域的应用有哪些影响
AI人工智能的影响 威格德森(Avi Wigderson)的研究成果对人工智能领域的应用产生了深远的影响。 首先,威格德森在计算复杂性理论、算法和优化方面的贡献为人工智能领域提供了高效、准确的计算模型和算法。他的研究帮助我们更好地理解计算问题…...
【免费领取源码】可直接复用的医院管理系统!
今天给大家分享一套基于SpringbootVue的医院管理系统源码,在实际项目中可以直接复用。(免费提供,文中自取) 系统运行图(设计报告和接口文档) 1、后台管理页面 2、排班管理页面 3、设计报告包含接口文档 源码免费领取方式 后台私信…...
leetcode代码记录(全排列 II
目录 1. 题目:2. 我的代码:小结: 1. 题目: 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2], [1,2,1], [2,1…...
【数据结构与算法】之双向链表及其实现!
个人主页:秋风起,再归来~ 数据结构与算法 个人格言:悟已往之不谏,知来者犹可追 克心守己,律己则安! 目录 1、双向链表的结构及概念 2、双向链表的实现 2.1 要实现的接口…...
记一次奇妙的某个edu渗透测试
前话: 对登录方法的轻视造成一系列的漏洞出现,对接口确实鉴权造成大量的信息泄露。从小程序到web端网址的奇妙的测试就此开始。(文章厚码,请见谅) 1. 寻找到目标站点的小程序 进入登录发现只需要姓名加学工号就能成功…...
设计模式学习笔记 - 设计模式与范式 -总结:1.回顾23中设计模式的原理、背后的思想、应用场景等
1.创建型设计模式 创建型设计模式包括:单例模式、工厂模式、建造者模式、原型模式。它主要解决对象的创建问题,封装复杂的创建过程,解耦对象的创建代码和使用代码。 1.单例模式 单例模式用来创建全局唯一的对象。一个类只允许创建一个对象…...
22 文件系统
了解了被打开的文件,肯定还有没被打开的文件,就是磁盘上的文件。先从磁盘开始认识 磁盘 概念 内存是掉电易失存储介质,磁盘是永久性存储介质 磁盘的种类有SSD,U盘,flash卡,光盘,磁带。磁盘是…...
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}{彩} 彩! 主要专栏内容包括: †《LAMMPS小技巧》: ‾ \textbf…...
【Java开发指南 | 第一篇】类、对象基础概念及Java特征
读者可订阅专栏:Java开发指南 |【CSDN秋说】 文章目录 类、对象基础概念Java特征 Java 是一种面向对象的编程语言,它主要通过类和对象来组织和管理代码。 类、对象基础概念 类:类是一个模板,它描述一类对象的行为和状态。例如水…...
Neo4j 图形数据库中有哪些构建块?
Neo4j 图形数据库具有以下构建块 - 节点属性关系标签数据浏览器 节点 节点是 Graph 的基本单位。 它包含具有键值对的属性,如下图所示。 NEmployee 节点 在这里,节点 Name "Employee" ,它包含一组属性作为键值对。 属性 属性是…...
002 springboot整合mybatis-plus
文章目录 TestMybatisGenerate.javapom.xmlapplication.yamlReceiveAddressMapper.xmlreceive_address.sqlReceiveAddress.javaReceiveAddressMapper.javaIReceiveAddressServiceReceiveAddressServiceImpl.javaReceiveAddressController.javaTestAddressService.javaSpringboo…...
代码随想录训练营第三十五期|第天16|二叉树part03|104.二叉树的最大深度 ● 111.二叉树的最小深度● 222.完全二叉树的节点个数
104. 二叉树的最大深度 - 力扣(LeetCode) 递归,可以前序遍历,也可以后序遍历 前序遍历是backtracking 下面是后序遍历的代码: /*** Definition for a binary tree node.* public class TreeNode {* int val;* …...
Mac版2024 CleanMyMac X 4.15.2 核心功能详解 cleanmymac这个软件怎么样?cleanmymac到底好不好用?
近些年伴随着苹果生态的蓬勃发展,越来越多的用户开始尝试接触Mac电脑。然而很多人上手Mac后会发现,它的使用逻辑与Windows存在很多不同,而且随着使用时间的增加,一些奇奇怪怪的文件也会占据有限的磁盘空间,进而影响使用…...
【华为OD机试】执行任务赚积分【C卷|100分】
题目描述 现有N个任务需要处理,同一时间只能处理一个任务,处理每个任务所需要的时间固定为1。 每个任务都有最晚处理时间限制和积分值,在最晚处理时间点之前处理完成任务才可获得对应的积分奖励。 可用于处理任务的时间有限,请问在…...
mybatis分页实现总结
1.mybatis拦截器相关知识 1.作用 mybatis的拦截器是mybatis提供的一个拓展机制,允许用户在使用时根据各自的需求对sql执行的各个阶段进行干预。比较常见的如对执行的sql进行监控,排查sql的执行时间,对sql进行拦截拼接需要的场景,…...
【全身灵巧操作:3D扩散策略、力自适应与接触显式学习】第六章 从人类视频学习操作技能
目录 第六章 从人类视频学习操作技能 6.1 人类视频学习的动机与挑战 6.1.1 传统示范学习的瓶颈 6.1.2 人类视频作为学习源的优势 6.1.3 核心挑战:视角、遮挡与动态 6.2 DexMan框架:从视频到双臂操作 6.2.1 手部-物体姿态估计 6.2.2 基于接触奖励的策略优化 6.2.3 仿…...
基于CCMusic的音乐推荐系统开发:MySQL数据库集成实践
基于CCMusic的音乐推荐系统开发:MySQL数据库集成实践 引言 音乐推荐系统已经成为现代音乐平台的核心功能,而如何高效存储和管理音乐数据是实现智能推荐的关键。今天我们将探讨如何将CCMusic音乐分类结果与MySQL数据库深度集成,构建一个实用…...
Windows Defender Remover终极指南:高效移除系统防护的完整方案
Windows Defender Remover终极指南:高效移除系统防护的完整方案 【免费下载链接】windows-defender-remover A tool which is uses to remove Windows Defender in Windows 8.x, Windows 10 (every version) and Windows 11. 项目地址: https://gitcode.com/gh_mi…...
Soop直播录制卡顿问题深度优化指南:从诊断到解决方案
Soop直播录制卡顿问题深度优化指南:从诊断到解决方案 【免费下载链接】DouyinLiveRecorder 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveRecorder 一、问题诊断:直播录制卡顿的多维度分析 1.1 用户场景画像 不同用户群体面临的录制…...
Qwen2.5-VL-7B-Instruct效果对比:不同量化方式(GPTQ/FP16)生成质量实测
Qwen2.5-VL-7B-Instruct效果对比:不同量化方式(GPTQ/FP16)生成质量实测 1. 模型概述 Qwen2.5-VL-7B-Instruct是一款强大的多模态视觉-语言模型,能够同时处理图像和文本输入,生成高质量的文本输出。该模型在7B参数规模…...
终端美化神器 Oh-My-Posh:终极跨平台提示符定制解决方案
终端美化神器 Oh-My-Posh:终极跨平台提示符定制解决方案 【免费下载链接】oh-my-posh JanDeDobbeleer/oh-my-posh: Oh My Posh 是一个跨平台的终端定制工具,用于增强 PowerShell、Zsh 和 Fish Shell 等终端的视觉效果,提供丰富的主题和样式来…...
B端拓客号码核验:困境审视与技术升级的行业思考氪迹科技法人股东号码筛选核验系统、阶梯式价格
在B端客户拓展的实践过程中,精准触达企业核心决策层(法人、股东、董监高等)是提升拓客成效的关键,而核心决策人联系方式的核验与筛选,作为拓客全流程的首要环节,其效率与质量直接关联拓客投入的实际回报&am…...
Snowflake 高级特性:自定义纪元、多进制编码与JSON序列化
Snowflake 高级特性:自定义纪元、多进制编码与JSON序列化 【免费下载链接】snowflake A simple to use Go (golang) package to generate or parse Twitter snowflake IDs 项目地址: https://gitcode.com/gh_mirrors/snow/snowflake Snowflake ID生成器是一个…...
实测StructBERT文本相似度:‘密码忘记‘与‘重置密码‘相似度0.85,效果惊艳
实测StructBERT文本相似度:密码忘记与重置密码相似度0.85,效果惊艳 1. 引言:语义相似度的实际价值 在日常工作和生活中,我们经常需要判断两段文字是否表达了相同或相似的意思。比如在客服系统中,用户可能会用不同的方…...
手把手教你用TM1620驱动数码管制作电子时钟(附完整代码)
从零构建基于TM1620的智能电子时钟:硬件连接、代码实现与调试全指南 在嵌入式开发领域,数码管显示一直是人机交互的重要组成部分。而TM1620作为一款专为LED驱动设计的控制芯片,以其简洁的三线接口和稳定的性能,成为众多硬件爱好者…...
