资讯专栏INFORMATION COLUMN

Nginx + Flask + Flup:完整演示

张迁 / 2286人阅读

摘要:最近想学点,发现大家一般都是自己编译。安装前,可以用查看各个安装包支持的模块。权衡之后,发现最佳选择为,也就是标准版。需要安装以支持注意启动时,绑定的文件。这个文件后续配置时要用到,它是和通信的桥梁。访问,不出意外即可看到另请参阅

最近想学点 Nginx,发现大家一般都是自己编译。自己编译也不难,但是考虑到 Ubuntu 自带的安装包就已经够用了,所以姑且先用起来再说。

安装 Nginx

Ubuntu 提供了四种 nginx 的安装包,功能由简到繁依次为:nginx-lightnginx-corenginx-fullnginx-extras

安装前,可以用 aptitude show 查看各个安装包支持的模块。比如 nginx-extrasnginx-full 多了 perllua 支持。

权衡之后,发现最佳选择为 nginx-full,也就是「标准版」。

$ sudo apt-get install nginx-full

nginx-full:
     nginx-common (= 1.9.3-1ubuntu1), libc6 (>= 2.14), libexpat1 (>= 2.0.1), libgd3 (>=
     2.1.0~alpha~), libgeoip1, libpam0g (>= 0.99.7.1), libpcre3, libssl1.0.0 (>= 1.0.2~beta3),
     libxml2 (>= 2.7.4), libxslt1.1 (>= 1.1.25), zlib1g (>= 1:1.2.0)

如果不清楚到底安装了哪些文件,可以通过 dpkg --listfiles 命令查看:

adam@t450s:~/study/nginx$ dpkg --listfiles nginx-full
/.
/usr
/usr/sbin
/usr/sbin/nginx
/usr/share
/usr/share/doc
/usr/share/doc/nginx-full
/usr/share/doc/nginx-full/copyright
/usr/share/doc/nginx-full/changelog.Debian.gz
/usr/share/man
/usr/share/man/man8
/usr/share/man/man8/nginx.8.gz
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/nginx-full

可以顺带安装一下文档:

$ sudo apt-get install nginx-doc
Nginx 命令

重启等操作可以通过 /etc/init.d/nginx 执行:

$ sudo /etc/init.d/nginx restart

这是一个 shell 脚本(/etc/init.d/ 目录下都是 shell 脚本),有如下命令可用:

configtest    reload        rotate        status        upgrade
force-reload  restart       start         stop

当然,直接用 /usr/sbin/nginx 也行,通过 -snginx 进程发送信号。

用 Flask 写一个应用

Flask 是 Python 的微型 Web 框架,之前在文章里有过介绍,现在写一个最简单的应用。

HOME 下建一个项目目录:

adam@t450s:~$ mkdir flaskr

flaskr 目录下创建文件 app.py,内容为:

# encoding: utf-8

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

再创建文件 flaskr.fcgi,内容为:

#!/usr/bin/python

from flup.server.fcgi import WSGIServer
from app import app

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

这就是 FastCGI wrapper。需要安装 Flup 以支持 FastCGI:

$ sudo pip install flup

注意启动 WSGI Server 时,绑定的 socket 文件。这个文件后续配置 Nginx 时要用到,它是 Flup 和 Nginx 通信的桥梁。

flaskr.fcgi 文件添加执行权限,不加也行,反正它就是个 Python 文件。

$ chmod +x flaskr.fcgi
配置 Nginx

简单起见,直接编辑 nginx.conf 文件:

$ sudo vim /etc/nginx/nginx.conf

添加一个 server 配置到 http 模块:

http {
    server {
        listen 80;
        server_name localhost;

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

最后一行指定了 Nginx 和 FastCGI 通信的 socket 文件:

fastcgi_pass unix:/tmp/flaskr-fcgi.sock;
运行程序

启动 FastCGI wrapper:

adam@t450s:~/flaskr$ ./flaskr.fcgi 

或者:

adam@t450s:~/flaskr$ python flaskr.fcgi 

切换到 root 用户,修改 socket 文件的权限:

adam@t450s:/tmp$ sudo su
[sudo] adam 的密码: 
root@t450s:/tmp# chmod 777 flaskr-fcgi.sock

否则 Nginx 无权访问这个 socket 文件。查看 /var/log/nginx/error.log 的话,会看到如下错误:

2015/11/09 22:23:21 [crit] 15357#15357: *1 connect() to unix:/tmp/flaskr-fcgi.sock failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/tmp/flaskr-fcgi.sock:", host: "localhost"

修改 socket 文件的权限后,Nginx 好像并不需要重启。

访问 http://localhost/,不出意外即可看到 "Hello World!"

另请参阅:http://segmentfault.com/a/1190000002652109

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39222.html

相关文章

  • Nginx + Flask + Flup完整演示

    摘要:最近想学点,发现大家一般都是自己编译。安装前,可以用查看各个安装包支持的模块。权衡之后,发现最佳选择为,也就是标准版。需要安装以支持注意启动时,绑定的文件。这个文件后续配置时要用到,它是和通信的桥梁。访问,不出意外即可看到另请参阅 最近想学点 Nginx,发现大家一般都是自己编译。自己编译也不难,但是考虑到 Ubuntu 自带的安装包就已经够用了,所以姑且先用起来再说。 安装 Ngin...

    JowayYoung 评论0 收藏0
  • Nginx + Flask + Flup完整演示

    摘要:最近想学点,发现大家一般都是自己编译。安装前,可以用查看各个安装包支持的模块。权衡之后,发现最佳选择为,也就是标准版。需要安装以支持注意启动时,绑定的文件。这个文件后续配置时要用到,它是和通信的桥梁。访问,不出意外即可看到另请参阅 最近想学点 Nginx,发现大家一般都是自己编译。自己编译也不难,但是考虑到 Ubuntu 自带的安装包就已经够用了,所以姑且先用起来再说。 安装 Ngin...

    hsluoyz 评论0 收藏0
  • 在Mac上使用Nginx和FastCGI部署Flask应用

    摘要:最近在学习,本文介绍一下如何部署开发的应用,同时也学习一下的使用,这只是在上的一个实验。应用这里使用的应用就是官方的文档中给出的。安装使用安装会自动安装及其依赖的程序。启动完成后,访问访问时出现了错误,这是因为我们的应用还没有启动。 最近在学习Flask,本文介绍一下如何部署Flask开发的应用,同时也学习一下Nginx的使用,这只是在Mac上的一个实验。 应用 这里使用的应用就是...

    daryl 评论0 收藏0
  • Python Flask 图床(TUSHE.ORG)开源

    摘要:演示图社是基于的图床和图片浏览网站源码,也可以用作套图网站。网站采用作为数据库,图片也储存于。特点注册用户可以认领未注册用户的图片,进行相关信息编辑。部署要求相关的支持见部署方法提供了配合的配置文件。 TUSHE 演示:http://tushe.org GitHub:https://github.com/ericls/tushe 图社(TUSHE)是基于 FLask 的图床和图片浏...

    wums 评论0 收藏0
  • Python Flask 图床(TUSHE.ORG)开源

    摘要:演示图社是基于的图床和图片浏览网站源码,也可以用作套图网站。网站采用作为数据库,图片也储存于。特点注册用户可以认领未注册用户的图片,进行相关信息编辑。部署要求相关的支持见部署方法提供了配合的配置文件。 TUSHE 演示:http://tushe.org GitHub:https://github.com/ericls/tushe 图社(TUSHE)是基于 FLask 的图床和图片浏...

    Achilles 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<