注:每个机器,软件版本可能不一样,虽然网上有很多类似的帖子,但是我在搭建的时候遇到了不少的坑,此文仅供参考。

请求流程:

1、安装uwsgi

uwsgi是一个应用服务器,非静态文件的网络请求就必须通过他完成,他也可以充当静态文件服务器,但不是他的强项。uwsgi是使用python编写的,因此通过`pip install uwsgi`就可以了。(uwsgi必须安装在系统级别的Python环境中,不要安装到虚拟环境中)。

pip install uwsgi

测试uwsgi是否安装正确:创建一个test.py的测试文件

# test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"] # python3
#return ["Hello World"] # python2

启动uwsgi服务:

uwsgi --http :8 --wsgi-file test.py

访问页面可以看到 Hello World ,标识uwsgi安装成功。

2、安装nginx

nginx是一个web服务器。用来加载静态文件和接收http请求的。

yum install nginx

默认安装完nginx是不会自动启动的:常用命令:

* 启动nginx:service nginx start
* 关闭nginx:service nginx stop
* 重启nginx:service nginx restart

nginx默认端口为80端口,浏览器访问地址看到如下显示则标识nginx安装成功了。

——修改nginx默认的80端口。

找到default.conf配置文件

直接修改对于端口就行了,修改完毕之后记得重启nginx生效。

3、配置uwsgi

在项目根目录创建***_uwsgi.ini 文件,基础配置信息如下

[uwsgi]
chdir=/srv/cms # 项目根目录
module=manage # 项目启动脚本名字
wsgi-file=/srv/cms/manage.py # flask启动脚本的具体文件
callable=app # 程序内的application变量名
home=/root/.virtualenvs/cms-env-py3 # 虚拟环境的具体路径
socket=127.0.0.1: # socket 协议,用于和nginx通讯
deamonize=/srv/cms/logs/cms-uwsgi.log # 日志文件 master=true # 主进程
processes= # 最大工作进程
threads= # 线程数量

关于socket和http的差别。从概念上来说,socket本身不是协议而是一种具体的TCP/IP实现方式,而HTTP是一种协议且基于TCP/IP。具体到这个配置这里来,如果我只配了socket = 127.0.0.1:5001的话,通过浏览器或者其他HTTP手段是无法成功访问的。而在uwsgi这边的日志里会提示请求包的长度超过了最大固定长度。另一方面,如果配置的是http = 127.0.0.1:5001的话,那么就可以直接通过一般的http手段来访问到目标。但这会引起nginx无法正常工作。

正确的做法应该是:

如果有nginx在uwsgi之前作为代理的话应该配socket   如:  socket=127.0.0.1:5001

而如果想让请求直接甩给uwsgi的话那么就要配http。  如:  http=127.0.0.1:5001

4、配置nginx

进入nginx的conf.d路径新建一个**.conf的配置文件。

配置信息如下:

server {
# 监听端口
listen ;
# 允许访问的域名或IP,本机IP
server_name 10.0.36.112;
charset utf-;
access_log /srv/cms/logs/access.log; # 日志文件
error_log /srv/cms/logs/error.log; # 错误日志文件 # 最大上传文件大小
client_max_body_size 75M; # 静态文件URL
location /static {
# 文件路径
alias /srv/cms/static;
} # 非静态文件服务器
location / {
include uwsgi_params; # 引入uwsgi配置
uwsgi_pass 127.0.0.1:; # uwsgi的配置文件里的socket对应 uwsgi_param UWSGI_CHDIR /srv/cms; # 项目根路径
uwsgi_param UWSGI_SCRIPT manage:app; # 启动的主程序
}
}

检查配置文件是否正常

# ervice nginx configtest 

5、启动nginx服务

# service nginx start

6、启动uwsgi服务

# uwsgi --ini cms_uwsgi.ini

到这里,服务器搭建完成。

备注:

uwsgi 常用命令:

uwsgi --ini cms_uwsgi.ini    //启动

uwsgi  cms_uwsgi.ini   --deamonize //后台运行启动  

uwsgi --stop uwsgi.pid  //停止服务  

uwsgi --reload uwsgi.pid  //可以无缝重启服务 

nginx+uwsgi+flask成功运行了。

nginx+uwsgi+flask 服务器配置的更多相关文章

  1. Ubuntu下nginx+uwsgi+flask的执行环境搭建

    选择web framwork是个非常艰难的事情, 主要分为轻量级和重量级框架. 因为没有搭建站点这样的须要, 所以回避SSH, Django这样的框架, 而选择一个轻量级框架. 自己也比較青睐pyth ...

  2. 一次请求中,经过 nginx+uWSGI+flask应用程序搭建服务的执行过程

    Flask框架有自带的http server,但是缺点非常明显,并发能力,及时响应非常差,只适合开发时自测使用. 在我接触过的项目中,生产环境使用nginx+uWSGI+flask应用程序进行部署服务 ...

  3. Ubuntu下使用Nginx+uWSGI+Flask(初体验)

    Ubuntu 18.04,Nginx 1.14.0, uWSGI 2.0.17.1,Flask, 前言 Windows不支持uWSGI!为了上线自己的项目,只能选择Linux. 自己前面开发了一个Fl ...

  4. nginx+uwsgi+flask+supervisor 项目部署

    环境 - Linux: Ubuntu 16.04 - uWSGI 2.0.18 - Flask 1.0.2 - supervisor 3.2.0 - nginx/1.8.1 首先区分几个概念 WSGI ...

  5. Docker构建nginx+uwsgi+flask镜像(二)

    Dockerfile搭建环境并打包应用 在上一章Docker构建nginx+uwsgi+flask镜像(一)的学习中,我们学会用命令行一句一句在alpine环境中搭建nginx+uwsgi+flask ...

  6. Docker构建nginx+uwsgi+flask镜像(一)

    前言 笔者之前是从事Java方面的工作,自从18年5月左右来到新的公司,接触到Python,被其简单优雅的语法风格深深吸引,同时,新公司也帮助笔者打开Docker世界的大门,让笔者体会到“一次打包,到 ...

  7. 服务器配置:ECS+Nginx+uWSGI+Flask——各部分详细介绍

    希望在阿里云ECS上搭建一个flask框架的web应用,经典的形式便是flask+uWSGI+nginx模式 服务器:CentOS 7.3 python版本:3.8.0 先贴一张全局图,这张图很清楚的 ...

  8. nginx uwsgi flask相关配置

    一.安装Nginx 在 /home/download下下载压缩包 wget https://nginx.org/download/nginx-1.12.2.tar.gz 解压缩 tar zxvf ng ...

  9. nginx+uwsgi+flask搭建python-web应用程序

    Flask本身就可以直接启动HTTP服务器,但是受限于管理.部署.性能等问题,在生产环境中,我们一般不会使用Flask自身所带的HTTP服务器. 从现在已有的实践来看,对于Flask,比较好的部署方式 ...

随机推荐

  1. 流行的软件工程过程--Rational统一过程!

    RUP提供了一个给角色分配任务和责任的严格方法,在J2EE开发中使用RUP出于以下三个原因: RUP以架构为中心:在将资源分配给全面开发之前,它先开发一个可执行的架构原型. UP是迭代并基于构件的. ...

  2. MAC Book 共享网络连接

    CHENYILONG Blog MAC Book 共享网络连接 MAC Book 共享网络连接 MAC比Windows共享连接要方便很多,只需要以下两步操作: 1.打开系统偏好设置,选择共享 2.选择 ...

  3. 第9月第6天 push pop动画 生成器模式(BUILDER)

    1. https://github.com/MichaelHuyp/QQNews 2.生成器模式(BUILDER) class MazeBuilder { public: virtual void B ...

  4. EM算法理解

    一.概述 概率模型有时既含有观测变量,又含有隐变量,如果概率模型的变量都是观测变量,那么给定数据,可以直接利用极大似然估计法或者贝叶斯估计法估计模型参数.但是,当模型同时又含有隐变量时,就不能简单地使 ...

  5. 安装informatic过程中的错误

    1.Check if the DISPLAY variable is set export DISPLAY=192.168.3.201:0.0 在注销用户并切换到oracle或者infa 用户,就可以 ...

  6. 图解USB协议之一 枚举过程【转】

    转自:http://blog.csdn.net/myarrow/article/details/8270060 0. 枚举流程 • 连接了设备的 HUB 在 HOST 查询其状态改变端点 时返回对应的 ...

  7. Qt 数字和字符处理总结

    1. 四舍五入保留小数几位 QString str="12.3456789"; double d1=str.toDouble(); qDebug()<<"d1 ...

  8. Vmware中Linux或macOS客户端如何回收硬盘空间

    Vmware对于Windows的客户端,使用GUI操作硬盘回收和整理磁盘即可.对于Linux或macOS客户端,需要在安装Vmware Tools之后,在客户端OS的终端Terminal里输入命令进行 ...

  9. Android 常用动画之RotateAnimation

    前两天接到任务做一个UI,有用到动画,于是抽空看了下Android动画相关知识. Android Animation共有四大类型,分别是 Alpha      透明度动画 Scale      大小伸 ...

  10. PHP时间戳和日期转换

    获取当前时间 <?php var_dump(time()); //获取当前时间戳 int(1502245603) 时间戳转换为时间,可以用date(‘Y-m-s h:i:s’, 具体时间戳来实现 ...