源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-03-21 07:17 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
最近在学习Flask,本文介绍一下如何部署Flask开发的应用,同时也学习一下Nginx的使用,这只是在Mac上的一个实验。 [b]应用[/b] 这里使用的应用就是官方的文档中给出的[url=http://flask.pocoo.org/docs/0.10/tutorial/]Flaskr[/url]。 [b]安装Nginx[/b] 使用[url=http://brew.sh/index_zh-cn.html]HomeBrew[/url]安装Nginx:
$ brew install nginx

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

Nginx的默认端口是8080,用浏览器打开localhost:8080,显示如下所示的页面说明Nginx已经工作了。 [img]http://files.jb51.net/file_images/article/201505/201552143836668.jpg?201542143853[/img] [b]配置Nginx[/b] 修改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: [img]http://files.jb51.net/file_images/article/201505/201552143905542.jpg?201542143916[/img] 访问时出现了错误,这是因为我们的应用还没有启动。 [b]FastCGI Server[/b] 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就可以看到我们的应用了。 [b]遇到的问题[/b] 第一次运行FastCGI server后,任然无法访问,查看Nginx的日志后发现Nginx服务器没有权限访问socket文件,修改nginx.conf添加user配置:
[u]复制代码[/u] 代码如下:
user wzy;
启动的时候Nginx报错:
nginx: [emerg] getgrnam("wzy") failed in /usr/local/etc/nginx/nginx.conf:2

Google一下后发现要加上用户组才行,改成这样:
[u]复制代码[/u] 代码如下:
user wzy wheel;
再次启动Nginx后一切正常了。 Nginx配置项user的使用方法:
Syntax: user user [group];
Default: user nobody nobody;

如果忽略group,Nginx会使用和user名称一样的用户组,例如我设置user wzy,那么Nginx启动的时候会去查找用户组wzy,我的电脑上没有这个用户组,所以Nginx会报错。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部