资讯专栏INFORMATION COLUMN

Nginx + Flask + Flup:完整演示

张迁 / 2514人阅读

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

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

安装 Nginx

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

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

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

</>复制代码

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

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

</>复制代码

  1. adam@t450s:~/study/nginx$ dpkg --listfiles nginx-full
  2. /.
  3. /usr
  4. /usr/sbin
  5. /usr/sbin/nginx
  6. /usr/share
  7. /usr/share/doc
  8. /usr/share/doc/nginx-full
  9. /usr/share/doc/nginx-full/copyright
  10. /usr/share/doc/nginx-full/changelog.Debian.gz
  11. /usr/share/man
  12. /usr/share/man/man8
  13. /usr/share/man/man8/nginx.8.gz
  14. /usr/share/lintian
  15. /usr/share/lintian/overrides
  16. /usr/share/lintian/overrides/nginx-full

可以顺带安装一下文档:

</>复制代码

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

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

</>复制代码

  1. $ sudo /etc/init.d/nginx restart

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

</>复制代码

  1. configtest reload rotate status upgrade
  2. force-reload restart start stop

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

用 Flask 写一个应用

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

HOME 下建一个项目目录:

</>复制代码

  1. adam@t450s:~$ mkdir flaskr

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

</>复制代码

  1. # encoding: utf-8
  2. from flask import Flask
  3. app = Flask(__name__)
  4. @app.route("/")
  5. def hello():
  6. return "Hello World!"

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

</>复制代码

  1. #!/usr/bin/python
  2. from flup.server.fcgi import WSGIServer
  3. from app import app
  4. if __name__ == "__main__":
  5. WSGIServer(app, bindAddress="/tmp/flaskr-fcgi.sock").run()

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

</>复制代码

  1. $ sudo pip install flup

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

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

</>复制代码

  1. $ chmod +x flaskr.fcgi
配置 Nginx

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

</>复制代码

  1. $ sudo vim /etc/nginx/nginx.conf

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

</>复制代码

  1. http {
  2. server {
  3. listen 80;
  4. server_name localhost;
  5. location / {
  6. try_files $uri @flaskr;
  7. }
  8. location @flaskr {
  9. include fastcgi_params;
  10. fastcgi_param SCRIPT_NAME "";
  11. fastcgi_param PATH_INFO $fastcgi_script_name;
  12. fastcgi_pass unix:/tmp/flaskr-fcgi.sock;
  13. }
  14. }
  15. }

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

</>复制代码

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

启动 FastCGI wrapper:

</>复制代码

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

或者:

</>复制代码

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

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

</>复制代码

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

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

</>复制代码

  1. 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...

    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元查看
<