欢迎来到山村网

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

2019-03-02 12:16:05浏览:421 来源:山村网   
核心摘要:  这篇文章主要介绍了在MacOS上部署Nginx和FastCGI以及Flask框架的教程,Flask是Python下一个极简的web开放框架,需要的朋友可以

  这篇文章主要介绍了在Mac OS上部署Nginx和FastCGI以及Flask框架的教程,Flask是Python下一个极简的web开放框架,需要的朋友可以参考下

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

  应用

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

  安装Nginx

  使用HomeBrew安装Nginx:

  ?

1 $ brew install nginx

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

  启动Nginx的命令:

  ?

1 $ nginx

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

201552143836668.jpg (600×358)

  配置Nginx

  修改Nginx的配置文件:

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 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:

  ?

1 2 $ nginx -s quit $ sudo nginx

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

  启动完成后,访问localhost:

201552143905542.jpg (600×322)

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

  FastCGI Server

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

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

  ?

1 $ pip install flup

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

  ?

1 2 3 4 5 6 #!/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文件可执行的权限:

  ?

1 $ chmod +x flaskr.fcgi

  手动启动server:

  ?

1 2 $ screen $ ./flaskr.fcgi

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

  ?

1 $ nohup ./flaskr.fcgi &

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

  遇到的问题

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

  复制代码 代码如下:

  user wzy;

  启动的时候Nginx报错:

  ?

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

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

  复制代码 代码如下:

  user wzy wheel;

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

  Nginx配置项user的使用方法:

  ?

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

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

注< >:更多精彩教程请关注山村编程

(责任编辑:豆豆)
下一篇:

在Python的Django框架中用流响应生成CSV文件的教程

上一篇:

用Python程序抓取网页的HTML信息的一个小实例

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com