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

应用

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

安装Nginx

使用HomeBrew安装Nginx:

shell$ brew install nginx

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

启动Nginx的命令:

shell$ nginx

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

配置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:

shell$ nginx -s quit
$ sudo nginx

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

启动完成后,访问localhost

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

FastCGI Server

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

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

shell$ pip install flup

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

Python#!/usr/bin/python
from flup.server.fcgi import WSGIServer
from flaskr import appif __name__ == '__main__':WSGIServer(app, bindAddress='/tmp/flaskr-fcgi.sock').run()

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

shell$ chmod +x flaskr.fcgi

手动启动server:

shell$ screen
$ ./flaskr.fcgi

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

shell$ 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会报错。

在Mac上使用Nginx和FastCGI部署Flask应用相关推荐

  1. linux下nginx+python+fastcgi部署总结(web.py版)

    2019独角兽企业重金招聘Python工程师标准>>> 在上一篇文章linux下nginx+python+fastcgi部署总结(django版)中,我们部署了nginx+djang ...

  2. windows下nginx+mono+fastCGI部署asp.net网站

    1,什么是nginx 简介 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx ...

  3. Mac上使用nginx访问本地文件夹报403的问题

    Mac上使用nginx访问本地文件夹报403的问题 就是没有权限访问你配置的文件夹在 nginx.conf头行加入下面配置 user root wheel; 不过我的电脑在启动nginx访问的时候会发 ...

  4. nginx mac 服务器 html,Mac上搭建 nginx 服务器

    因为需要做一个自己的内测分发平台,所以需要搭建一台自己的服务器,于是我选择了使用它 nginx 来搭建服务器,很方便,很简单. 本文主要讲一下如何在 mac 上搭建 nginx 服务器,已经一些简单的 ...

  5. 利用flask写的接口(base64, 二进制, 上传视频流)+异步+gunicorn部署Flask服务+多gpu卡部署

    一.flask写的接口 1.1 manage.py启动服务(发送图片base64版) 这里要注意的是用docker的话,记得端口映射 #coding:utf-8 import base64 impor ...

  6. nginx fastcgi python_linux下nginx+python+fastcgi部署总结(django版)

    最近因为项目上的需要开始大量使用nginx,因此也想趁机将以前常用的django+apache的架构换成django+nginx+fastcgi,此文是整个搭建的步骤,主要留作备忘,也希望对大家有所帮 ...

  7. Mac上搭建Nginx + rtmp

    介绍 nginx是非常优秀的开源服务器,用它来做hls或者rtmp流媒体服务器是非常不错的选择,本人在网上整理了安装流程,分享给大家并且作备忘. 安装步骤 1.先安装brew: /usr/bin/ru ...

  8. mac上使用nginx代理

    以下内容不具有共用性. 第一步:修改host文件 sudo vim /etc/hosts 第二步:下载nginx 第三步:修改nginx的配置文件 1.修改nginx.conf文件 路径: /opt/ ...

  9. mac上启动nginx遇到80端口被占用的解决方法(猜了好久的坑我擦)

    今天启动nginx的时候,发现80端口被占用,用ps -ef | grep nginx和lsof -i:80都找不到,后来上网搜索后发现是apache的问题,是因为系统自带的apache启动了所以占用 ...

最新文章

  1. Java解压上传zip或rar文件,并解压遍历文件中的html的路径
  2. CF1088F. Ehab and a weird weight formula(倍增)
  3. python项目实战:模拟登陆CSDN
  4. QT tableWidget的使用及其实例
  5. GBK字库集测试求助
  6. 华为DHCP故障常用排查命令
  7. 2.3、IPMP,PMP,PRINCE2
  8. 电脑开机是哪个键 电脑常用快捷键盘点
  9. python的Bio下的Entrez使用
  10. Spring入门笔记总结
  11. 13.6.1 PDF 偏执狂
  12. PHP单元测试框架 - PHPUnit介绍
  13. 004-2018-09-06 列表
  14. Unity-tweak-tool插件
  15. Android 架构设计与挑选
  16. jquery获取父元素下的第n个子元素
  17. placement new理解
  18. java远程连接linux并发送命令,两种方案比较Jsch与ganymed-ssh2
  19. 2021湖南省地区高考成绩排名查询,湖南高考排名查询方法 2020年湖南高考成绩位次全省排名查询...
  20. vmware16下安装ubuntu20.0报错:发生错误,导致虚拟 CPU 进入关闭状态。如果虚拟机外部发生此错误,则可能已导致物理计算机重新启动……

热门文章

  1. 记住:永远不要在 MySQL 中使用 UTF-8
  2. 15 年腾讯老兵谈技术人成长之路
  3. NLP经典算法复现!CRF原理及实现代码
  4. 商汤涨涨涨涨:上市4日股价累涨130%,市值一度3000亿港元
  5. 最全面的Python重点知识汇总,建议收藏!
  6. Github下载量10万次,最终被所有大厂封杀!
  7. 21岁华人本科生,凭什么拿下CVPR 2020最佳论文提名?
  8. 在百度工作是一种什么样的体验?
  9. 那些为了学技术而离婚、私奔的大佬们运营的公众号有哪些?
  10. 一个女程序媛征男友的需求说明书