在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 HTMLParser模块解析html获取url实例
Apr 08 Python
TensorFlow实现MLP多层感知机模型
Mar 09 Python
Python3实现统计单词表中每个字母出现频率的方法示例
Jan 28 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
详解python websocket获取实时数据的几种常见链接方式
Jul 01 Python
Django后端接收嵌套Json数据及解析详解
Jul 17 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
Feb 10 Python
通过python连接Linux命令行代码实例
Feb 18 Python
python datetime时间格式的相互转换问题
Jun 11 Python
详解tensorflow之过拟合问题实战
Nov 01 Python
Python数据类型最全知识总结
May 31 Python
python如何为list实现find方法
May 30 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 和 HTML
2006/10/09 PHP
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
如何在PHP中使用正则表达式进行查找替换
2013/06/13 PHP
php字符串函数学习之substr()
2015/03/27 PHP
PHP SOCKET编程详解
2015/05/22 PHP
Mac系统完美安装PHP7详细教程
2017/06/06 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
json的定义、标准格式及json字符串检验
2014/05/11 Javascript
jQuery 重复加载错误以及修复方法
2014/12/16 Javascript
jQuery中:disabled选择器用法实例
2015/01/04 Javascript
无需 Flash 使用 jQuery 复制文字到剪贴板
2016/04/26 Javascript
全面了解javascript三元运算符
2016/06/27 Javascript
js仿支付宝多方框输入支付密码效果
2016/09/27 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
常用的js方法合集
2017/03/10 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
2017/09/28 Javascript
基于datepicker定义自己的angular时间组件的示例
2018/03/14 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
微信小程序项目实践之九宫格实现及item跳转功能
2018/07/19 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
2018/08/20 Javascript
关于单文件组件.vue的使用
2018/09/20 Javascript
原生JS实现弹幕效果的简单操作指南
2020/11/10 Javascript
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
Python利用sqlacodegen自动生成ORM实体类示例
2019/06/04 Python
python3下载抖音视频的完整代码
2019/06/05 Python
Python 线程池用法简单示例
2019/10/02 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
德国原装品牌香水、化妆品和手表网站:BRASTY.DE
2016/10/16 全球购物
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
学生爱国演讲稿
2014/01/14 职场文书
三八节标语
2014/06/27 职场文书
党支部意见范文
2015/06/02 职场文书
中学语文教学反思
2016/02/16 职场文书
终止合同协议书范本
2016/03/22 职场文书