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 ;    
}
相关推荐
zyl837211 小时前
Docker 使用手册
运维·docker·容器
古月方枘Fry1 小时前
MGRE实验
运维·服务器
stolentime2 小时前
FreeDomain 本地开发环境快速搭建指南
运维·服务器·网络
bush43 小时前
嵌入式linux学习记录四
linux·运维·学习
lihao lihao4 小时前
软硬链接
linux·运维·服务器
TOWE technology4 小时前
智能安防监控系统如何做好防雷?——视频信号SPD综合应用方案解析
运维·服务器·防雷产品·信号保护·信号防雷·spd
楼田莉子4 小时前
Docker学习:Docker介绍及其架构介绍
运维·后端·学习·docker·容器·架构
大明者省5 小时前
IIS 端口绑定正常访问的原理说明与常见误区澄清
运维·服务器·笔记
晚风吹红霞5 小时前
Linux软件包管理器详解 —— yum与apt的使用及软件生态
linux·运维·服务器
曦夜日长5 小时前
Linux系统篇,进程概念(一):计算机体系、操作系统的认识、程序的加载过程
linux·运维·网络