在Mac OS上部署Nginx和FastCGI以及Flask框架的教程


Posted in Python onMay 02, 2015

最近在学习Flask,本文介绍一下如何部署Flask开发的应用,同时也学习一下Nginx的使用,这只是在Mac上的一个实验。
应用

这里使用的应用就是官方的文档中给出的Flaskr。
安装Nginx

使用HomeBrew安装Nginx:

$ brew install nginx

HomeBrew会自动安装Nginx及其依赖的程序。在我的电脑上安装的是Nginx 1.6.2,配置文件的路径是/usr/local/etc/nginx/nginx.conf。

启动Nginx的命令:

$ nginx

Nginx的默认端口是8080,用浏览器打开localhost:8080,显示如下所示的页面说明Nginx已经工作了。

在Mac OS上部署Nginx和FastCGI以及Flask框架的教程

配置Nginx

修改Nginx的配置文件:

server {
  listen 80;
  server_name localhost;
  charset utf-8;

  location / { try_files $uri @flaskr; }
  location @flaskr {
    include fastcgi_params;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    fastcgi_param SCRIPT_NAME "";
    fastcgi_pass unix:/tmp/flaskr-fcgi.sock;
  }
}

重新启动Nginx:

$ nginx -s quit
$ sudo nginx

因为使用了80端口,启动Nginx时需要加上sudo。

启动完成后,访问localhost:

在Mac OS上部署Nginx和FastCGI以及Flask框架的教程

访问时出现了错误,这是因为我们的应用还没有启动。
FastCGI Server

Nginx是一个静态WEB服务器,不能直接运行我们的Python应用,当Nginx接受到请求时,会通过FastCGI转发给我们的应用,应用是运行在FastCGI Server上的,这个server接收Nginx的请求并调用我们的程序,将结果返回给Nginx,Nginx再将结果返回给用户。

我们要使用的FastCGI Server是flup,安装方法:

$ pip install flup

在应用目录下创建一个fcgi文件,例如flaskr.fcgi:

#!/usr/bin/python
from flup.server.fcgi import WSGIServer
from flaskr import app

if __name__ == '__main__':
  WSGIServer(app, bindAddress='/tmp/flaskr-fcgi.sock').run()

同时给fcgi文件可执行的权限:

$ chmod +x flaskr.fcgi

手动启动server:

$ screen
$ ./flaskr.fcgi

使用screen使server在后台运行,或者:

$ nohup ./flaskr.fcgi &

再次访问localhost就可以看到我们的应用了。
遇到的问题

第一次运行FastCGI server后,任然无法访问,查看Nginx的日志后发现Nginx服务器没有权限访问socket文件,修改nginx.conf添加user配置:

user wzy;

启动的时候Nginx报错:

nginx: [emerg] getgrnam("wzy") failed in /usr/local/etc/nginx/nginx.conf:2

Google一下后发现要加上用户组才行,改成这样:

user wzy wheel;

再次启动Nginx后一切正常了。

Nginx配置项user的使用方法:

Syntax: user user [group];
Default: user nobody nobody;

如果忽略group,Nginx会使用和user名称一样的用户组,例如我设置user wzy,那么Nginx启动的时候会去查找用户组wzy,我的电脑上没有这个用户组,所以Nginx会报错。

Python 相关文章推荐
Python读取Excel的方法实例分析
Jul 11 Python
最大K个数问题的Python版解法总结
Jun 16 Python
Python首次安装后运行报错(0xc000007b)的解决方法
Oct 18 Python
Python中shape计算矩阵的方法示例
Apr 21 Python
Pandas探索之高性能函数eval和query解析
Oct 28 Python
python的concat等多种用法详解
Nov 28 Python
python3发送邮件需要经过代理服务器的示例代码
Jul 25 Python
对django中foreignkey的简单使用详解
Jul 28 Python
给你一面国旗 教你用python画中国国旗
Sep 24 Python
基于python修改srt字幕的时间轴
Feb 03 Python
使用pygame编写Flappy bird小游戏
Mar 14 Python
python实现文字版扫雷
Apr 24 Python
在Python的Django框架中用流响应生成CSV文件的教程
May 02 #Python
详细解读Python中的__init__()方法
May 02 #Python
举例讲解Python的Tornado框架实现数据可视化的教程
May 02 #Python
Python的Bottle框架中返回静态文件和JSON对象的方法
Apr 30 #Python
使用Python编写提取日志中的中文的脚本的方法
Apr 30 #Python
简单的连接MySQL与Python的Bottle框架的方法
Apr 30 #Python
Python的Bottle框架中实现最基本的get和post的方法的教程
Apr 30 #Python
You might like
php中mysql模块部分功能的简单封装
2011/09/30 PHP
如何用php生成扭曲及旋转的验证码图片
2013/06/07 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
Javascript 模式实例 观察者模式
2009/10/24 Javascript
JS 非图片动态loading效果实现代码
2010/04/09 Javascript
javascript自定义startWith()和endWith()的两种方法
2013/11/11 Javascript
jquery跟js初始化加载的多种方法及区别介绍
2014/04/02 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
2017/02/13 Javascript
基于angular实现三级联动的生日插件
2017/05/12 Javascript
npm国内镜像 安装失败的几种解决方案
2017/06/04 Javascript
jquery拖动改变div大小
2017/07/04 jQuery
vue.js实现简单轮播图效果
2017/10/10 Javascript
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
微信小程序实现签到功能
2018/10/31 Javascript
JavaScript 点击触发复制功能实例详解
2018/11/02 Javascript
实例详解vue中的$root和$parent
2019/04/29 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
[01:20]DOTA2更新全新英雄 天涯墨客现已加入游戏
2018/08/25 DOTA
Python闭包之返回函数的函数用法示例
2018/01/27 Python
超简单使用Python换脸实例
2019/03/27 Python
利用Python小工具实现3秒钟将视频转换为音频
2019/10/29 Python
基于plt.title无法显示中文的快速解决
2020/05/16 Python
康拓普公司Java笔面试
2016/09/23 面试题
承租经营合作者协议书
2014/10/01 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
搞笑结婚保证书
2015/05/08 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
运动会闭幕式主持词
2015/07/01 职场文书
环保建议书范文
2015/09/14 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
python opencv通过4坐标剪裁图片
2021/06/05 Python
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python