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;
                }

        }

        }

测试

原文地址:https://www.cnblogs.com/pyweb/p/12030929.html

时间: 2024-11-06 07:10:44

uwsgi + nginx 部署python项目(一)的相关文章

uwsgi+nginx部署django项目

1. 概念解析(wsgi协议,uwsgi协议,uWSGI) 参考:https://www.cnblogs.com/wspblog/p/8575101.html 1.1 现实世界的web请求: 1.2  wsgi协议,uwsgi协议和uWSGI a. WSGI(wsgi): 全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种

vue+uwsgi+nginx部署前后端分离项目

一:vue+uwsgi+nginx部署 1.1:准备代码: # 路飞学城django代码 https://files.cnblogs.com/files/pyyu/luffy_boy.zip # vue代码 https://files.cnblogs.com/files/pyyu/07-luffy_project_01.zip 1.2:部署准备 1. 部署环境准备 ⑴ . 准备python3和虚拟环境解释器,python3,virtualenvwrapper. pip3 install -i h

Django+uWSGI+Nginx 部署网站

Django 1.11设置 保证Django在本地调试没有问题: 当然这是前提^_^ 收集静态文件至指定文件夹 Django静态文件设置具体参考:https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/ 在myproject/settings.py中设置静态文件STATIC_URL和STATIC_ROOT设置: 如: STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE

django+uwsgi+nginx部署(非常详细)

django+uwsgi+nginx部署 1.介绍: 在网上看了很多教程,但自己部署了很久都没有成功,这篇博文记录自己所踩过得坑. 2.环境: 1 Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-130-generic x86_64) 3.下载uwsgi以及nginx 1 apt-get install uwsgi 2 apt-get install nginx (注:如果下载异常出现权限问题,在命令前添加sudo) 4.创建Django项目 例如:项目名为mysite

mac+django(1.8.2)+uwsgi+nginx 部署

一. uwsgi 安装 检验 配置uwsgi.ini 1. 安装 pip3 install uwsgi 2. 检验 方法一(uwsgi启动文件): test.py内容如下: def application(env, start_response): start_response('200 OK', [('Content-Type','text/html')]) return [b"Hello World"] uwsgi --http 0.0.0.0:8000 --wsgi-file t

Nginx部署Django项目报错 KeyError: 'REQUEST_METHOD'

这个问题是应为Nginx的配置文件有问题: 要使用uwsgi启动Django的话要有以下配置: upstream djangos14{ # nginx负载均衡配置: server 10.0.0.10:9999; #server 10.0.0.11:80; } server { listen 80; server_name www.s14hanju.com; location / { # 要使用uwsgi,代理就不要用proxy_pass了,要使用uwsgi_pass: uwsgi_pass dj

nginx部署h5项目

1. nginx部署h5项目 此为windows部署,liunx也类似的 1.1. 前言 部署h5项目还是很简单的,不过对小白来讲一开始可能也是一脸懵逼,这个简单教程针对的是从未部署过前后端分离前端项目的小白 1.2. 步骤 1.2.1. 下载nginx 如下图目录 1.2.2. 放入经过编译的h5项目 把经过编译的h5项目放入html文件夹下,可以在html里面创建一个单独文件夹,把内容放进去 如下图 1.2.3. 修改conf 进入conf目录,打开nginx.conf文件 1.2.4. 启

ubuntu 16.04部署python项目(Nginx+uwsgi+django)

尝试在linux上部署项目,先从最熟悉的python项目开始吧. 1.安装Nginx 命令:sudo apt-get install nginx 2.安装uwsgi,从pip仓库安装 命令:pip3 install uwsgi 3.把django项目移到服务器 通过这次操作才知道往linux上拖文件不能拖文件.因此需要打包一下才能移动文件.我这个云服务器默认支持的xxx.tar.gz格式的文件,但是在windows上压缩的时候只能压缩成zip的,所以这里有两个办法 1)在windows上安装一个

Django+uWsgi+nginx部署

一.环境 操作系统:Ubuntu 14.04 64位 python:2.7.6 Django:1.8.2 项目源码:https://github.com/youchuancong/django.git 部署方式:Django+uWsgi+nginx 二.部署 1.Django安装 官网:https://www.djangoproject.com/ 安装 wget https://www.djangoproject.com/m/releases/1.8/Django-1.8.2.tar.gz ta