• uwsgi + nginx 部署python项目(一)


    uWSGI

    uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

    要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。

    • WSGI是一种通信协议,Flask,webpy,Django、CherryPy等等都自带WSGI,不过性能都不好。
    • uwsgi同WSGI一样是一种通信协议。
    • 而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。

    为什么有了uWSGI为什么还需要nginx?因为nginx具备优秀的静态内容处理能力,然后将动态内容转发给uWSGI服务器,这样可以达到很好的客户端响应。

    安装

    pip install uwsgi

    编写uwsgi.ini文件

    在项目目录下touch一个ini文件,名称随意,vim进去,复制以下代码

    [uwsgi]
    socket = 0.0.0.0:8000  # 设置0.0.0.0表示可以接收不同服务器的nginx发送过来的请求,127.0.0.1表示只接收同一服务器发送过来的请求, 8000为应用内的监听端口
    # http = 0.0.0.0:8000 # http为直接作为web服务器启动 chdir
    = /knowledge # 指向项目目录 wsgi-file = app.py # 程序启动文件 callable = app # 程序内应用变量名 processes = 2 # 处理器数量 threads = 4 # 线程数

    启动应用

    uwsgi --ini uwsgi.ini   # 启动后直接进控制台
    nohup uwsgi --ini uwsgi.ini & # 后台启动uwsgi服务器
    kill -9 pid # 关闭服务,直接kill uwsgi的端口

    nginx

    什么是nginx?

    nginx是一款轻量级的Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。主要有反向代理,负载均衡的功能。

    什么是反向代理?

    正向代理是服务器经过正向代理服务器把数据给到客户端,反向代理就是多个不同的客户端发出请求到反向代理服务器(nginx),反向代理服务器按照一定规则把请求分发给服务器A,服务器B,服务器C。

    正向代理客户端非常明确要访问的服务器地址,服务器只清除请求来自哪个代理服务器,而不清楚来自哪个具体的客户端。反向代理客户端不知道访问的服务器地址是哪个,只能由反向代理服务器去分配请求给某个具体的服务器。

    什么是负载均衡?

    将服务器接收到的请求按照规则分发的过程。

    • weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。
    • ip_hash:   每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
    • fair:   智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块
    • url_hash:   按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包

    安装nginx

    apt-get install nginx

    nginx常用命令

    service nginx start    # 启动
    service  nginx  stop   # 停止
    service  nginx  reload  # 重启
    service  nginx  status   # 查看nginx状态
    nginx -v   # 查看版本

    配置文件

    cd 到安装目录,一般是/etc/nginx,里面有个nginx.conf文件

    vim 进去,匹配顺序是先ip > 端口 > location

    http {
            server {
                    listen 81;   # nginx的监听端口,浏览器访问的端口,等同于0.0.0.0:81, 表示可以接收任何IP发的请求
                    server_name 0.0.0.0;   # 可以直接写域名如:www.flasktest.com,但是需要在hosts文件设置IP和域名的对应关系
                    charset UTF-8;
                    access_log /etc/nginx/FlaskTest_access.log;
                    error_log /etc/nginx/FlaskTest_error.log;
                    client_max_body_size 75M;  # 请求文件的最大大小
    
                    location / {
                            include uwsgi_params;
                            uwsgi_pass 127.0.0.1:82;  # 上面的匹配成功后,会请求这个地址
                            uwsgi_read_timeout 2;
                    }
    
            }
    
            }

     测试

  • 相关阅读:
    【Eclipse导入外部包解决方案】由GoogleMap导入gms包问题引出
    新生活即将开始

    继续我的C旅程
    圣诞后
    新年
    来来回回;不知所云
    吵啊吵啊吵啊
    去海边
    休假结束
  • 原文地址:https://www.cnblogs.com/pyweb/p/12030929.html
Copyright © 2020-2023  润新知