当前位置

网站首页> 程序设计 > 开源项目 > 程序开发 > 浏览文章

Nginx + Flask + Flup: 完整演示

作者:小梦 来源: 网络 时间: 2024-08-13 阅读:

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

安装Nginx

Ubuntu提供了四种nginx的安装包, 功能由简到繁依次为: nginx-light, nginx-core, nginx-full, nginx-extras.

安装前, 可以用 aptitude show 查看各个安装包支持的模块. 比如nginx-extras比nginx-full多了perl和lua支持.

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

$ sudo apt-get install nginx-fullnginx-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        upgradeforce-reload  restart       start         stop

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

用Flask写一个应用

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

在HOME下建一个项目目录:

adam@t450s:~$ mkdir flaskr

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

# encoding: utf-8from flask import Flaskapp = Flask(__name__)@app.route('/')def hello():    return 'Hello World!'

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

#!/usr/bin/pythonfrom flup.server.fcgi import WSGIServerfrom app import appif __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

热点阅读

网友最爱