当前位置: 首页 > 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…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...