发布于 2015-11-14 15:22:47 | 374 次阅读 | 评论: 0 | 来源: PHPERZ
Flask 轻量级Python Web开发框架
Flask是一个使用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2 模板引擎。使用 BSD 授权。
最近想学点Nginx, 发现大家一般都是自己编译. 自己编译也不难, 但是考虑到Ubuntu自带的安装包就已经够用了, 所以姑且先用起来再说.
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-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
重启等操作可以通过 /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 也行, 通过 -s 给 nginx 进程发送信号.
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.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!"