本文解释python如何在nginx+spawn-fcg运行
spawn-fcgi是一个小程序,作用是管理fast-cgi进程,简单小巧,原先是属于lighttpd的一部分,后来由于使用比较广泛,所以就独立项目了.
spawn-fcgi最新下载地址http://redmine.lighttpd.net/news/9
wget http://download.lighttpd.net/spawn-fcgi/releases-1.6.x/spawn-fcgi-1.6.4.tar.gz
tar -zxvf spawn-fcgi-1.6.4.tar.gz
cd spawn-fcgi-1.6.4
./configure #编译
make
1.部署准备
Nginx (我装的是 version: nginx/1.13.5, lnmp安装,方便) (需要包含 fastcgi 与rewrite 模块).
查看nginx版本 ./nginx -v
Webpy (是Python的一个web框架,它非常简单,非常强大)
Spawn-fcgi
Flup (它负责接受转发的请求)
2.在网站根目录下新建index.py 我的根目录设置在/home/wwwroot/gpio
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import web
urls = ("/.*", "hello")
app = web.application(urls, globals())
class hello:
def GET(self):
return 'Hello, world!'
if __name__ == "__main__":
web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)
app.run()
注意:通过执行chmod +x index. py使您的文件可执行。如果它不是可执行的,就会出现错误。
3. Nginx 配置
#我的conf文件位置: cd /usr/local/nginx/nginx.conf 或 cd /usr/local/nginx/vhost/配置文件
location / {
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_pass 127.0.0.1:9002;
}
#配置静态
location /static/ {
root /home/wwwroot/gpio;
if (-f $request_filename) {
rewrite ^/static/(.*)$ /static/$1 break;
}
}
4.Spawn-fcgi
开启 :spawn-fcgi -d /home/wwwroot/gpio -f /home/wwwroot/gpio/index.py -a 127.0.0.1 -p 9002
关闭: kill `pgrep -f "python /path/to/www/gpio/index.py"`
你可以运行ps aux | grep index.py 查看运行
注意,在配置nginx的fastcgi时可能会报错如下:
child exited with 2
解决方法: insert #!/usr/bin/env python into header of index.py
spawn-fcgi child exited with 126
解决方法: chmod +x upload.py
child exited with1
加-n参数 如spawn-fcgi -d //home/wwwroot/gpio -f /home/wwwroot/gpio/index.py -a 127.0.0.1 -p 9002 -n
5.重启nginx
如果你使用的是lnmp那就太简单了一句即可 lnmp restart
不过不是lnmp安装nginx, 进入可执行的目录下cd /usr/local/nginx/sbin 输入命令./nginx -s reload 即可