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: # 设置0.0.0.0表示可以接收不同服务器的nginx发送过来的请求,127.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 ; # nginx的监听端口,浏览器访问的端口,等同于0.0.0.0:81, 表示可以接收任何IP发的请求
server_name 0.0.0.0; # 可以直接写域名如:www.flasktest.com,但是需要在hosts文件设置IP和域名的对应关系
charset UTF-;
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:; # 上面的匹配成功后,会请求这个地址
uwsgi_read_timeout ;
} } }
测试
uwsgi + nginx 部署python项目(一)的更多相关文章
- uwsgi + nginx 部署python项目(二)
实现负载均衡 开启两个服务器,nginx负责分发请求到两个服务器,以减轻单个服务器负担. 配置uwsgi服务器 在a项目目录下生成uwsgi.ini文件,在b项目目录下生成uwsgi.ini文件,如何 ...
- 使用uWSGI+nginx部署Django项目
最近使用django写了一些项目,不过部署到服务器上碰到一些问题,还有静态文件什么的一堆问题,这里总结一下碰到的问题和解决方案,总体思路是按照官方文档走的. 原文地址:http://uwsgi-doc ...
- ubuntu18+uwsgi+nginx部署django项目
更新系统软件源 sudo apt-get update pip3安装 sudo apt install python3-pip 安装virtualenvwrapper pip3 install vir ...
- vue+uwsgi+nginx部署luffty项目
在部署项目之前本人已经将前端代码和后端代码发布在了一个网站上,大家可自行下载,当然如果有Xftp工具也可以直接从本地导入. django代码 https://files.cnblogs.com/fil ...
- uwsgi+nginx部署django项目
1. 概念解析(wsgi协议,uwsgi协议,uWSGI) 参考:https://www.cnblogs.com/wspblog/p/8575101.html 1.1 现实世界的web请求: 1.2 ...
- centOS+uwsgi+nginx 部署flask项目,问题记录
用flask做的项目想要部署到centOS系统上,填了一些坑,终于成功了,记录一下遇到的问题: 此次部署主要是按照这个博客进行的 https://www.cnblogs.com/Ray-liang/p ...
- Ubuntu+Django+uWSGI+Nginx部署Django项目
安装uWSGI,pip依据自己要使用的python版本自行选择,python2.x版本使用pip进行安装,python3.x版本使用pip3进行安装 pip install uwsgi 配置uWSGI ...
- 基于腾讯云CentOS7.4+MySQL5.7+Python3+uwsgi+nginx的Django项目部署
准备知识 1.django一个基于python的开源web框架,请确保自己熟悉它的框架目录结构. 2.uWSGI一个基于自有的uwsgi协议.wsgi协议和http服务协议的web网关 3.nginx ...
- Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx)
Linux 集群概念 , wsgi , Nginx负载均衡实验 , 部署CRM(Django+uwsgi+nginx), 部署学城项目(vue+uwsgi+nginx) 一丶集群和Nginx反向代理 ...
随机推荐
- 转:ThreadLocal剖析
转自http://www.cnblogs.com/dolphin0520/p/3920407.html 一.对ThreadLocal的理解 ThreadLocal,很多地方叫做线程本地变量,也有些地方 ...
- rsync+inotify实时数据同步单目录实战
rsync+inotify实时数据同步单目录实战 rsync+inotify实时数据同步单目录实战 inotify是一个强大的.细粒度的.异步的文件系统事件监控机制,linux内核从2.6.13起 ...
- wordpress设置本地化语言
wordpress语言本地化 在wordpress上很多插件不支持本地化语言如:中文,需要本地化,则需要制作本地化语言的po(用于编辑)和mo(用于机器识别)文件.可以没有*.po文件,但是不能没有* ...
- 【JZOJ1282】打工
题目 分析 显然,有一个结论, 在有效的方案中,第i位的数一定小于等于i. 所以,设\(f_{i,j,k}\)表示,做到第i位,前i位的最大值为j,前i位是否与输入的序列的前i位相等. 转移方程随便搞 ...
- LTM加速优化特性
TCP Express TCP Express 是 LTM 产品的一项重要特性. 借助 TCP Express,LTM 可分别为客户机端和服务器端创建独立的连接.这样一来,LTM 可以针对客户机连接和 ...
- vue项目中监听sessionStorage值发生变化
首先在main.js中给Vue.protorype注册一个全局方法, 其中,我们约定好了想要监听的sessionStorage的key值为’watchStorage’, 然后创建一个StorageEv ...
- 在postman中请求的接口有csrf怎么办
今天在写项目的时候,写了一个post接口,为了防止crsf攻击,config.defalut.js文件中加了如下代码: exports.security = { csrf: { ignoreJSON: ...
- BZOJ 4289: PA2012 Tax Dijkstra + 查分
Description 给出一个N个点M条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点1到点N的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边 ...
- pythonCSV模块
在爬虫过后会取得很多信息! 将信息存起来方法还很多中!今天提一下CSV模块 导入模块 import csv 这里先写个列表 rows = [['zhangsan',20],['lisi',22],[' ...
- FP AUTO节点ZPP002M执行卡住解决
正常情况下,不到一分钟即可执行完ZPP002M节点 异常情况下,超过十分钟都没有响应 再等待只会影响FP的执行时间,影响后续的节点,解决办法是将正在执行的JOB STOP掉 再到服务器上将该节点重新执 ...