• linux平台下使用 nginx + spawn-cgi 部署webpy程序


    需要安装的工具:

    • nginx
    • webpy
    • flup(在spawn-fcgi安装之前安装)
    • spawn-fcgi

    注意:

    • 你可以重命名index.py为任何你想要的文件名。
    • /path/to/www 为代码路径。
    • /path/to/www/index.py为python代码的完整路径。

    nginx配置:

    这里在vhosts目录下新建一个webpy.conf配置文件

    添加以下配置信息:

    location / {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;  # [1]
        fastcgi_param PATH_INFO $fastcgi_script_name;        # [2]
        fastcgi_pass 127.0.0.1:9002;
    }


    对于静态文件配置:

    location /static/ {
        if (-f $request_filename) {
        rewrite ^/static/(.*)$  /static/$1 break;
        }
    }

    注意:别忘了添加网站根目录配置

     配置nginx后,可以运行以下命令来检查配置文件是否正确

    [root@server www]# nginx -t
    nginx: the configuration file /path/server/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /path/server/nginx/conf/nginx.conf test is successful

    运行python程序,python index.py 9002 fastcgi

    通过浏览器可查看配置成功,配置成功在浏览器显示hello world

    Spawn-fcgi配置和使用

    运行一下命令打开spawn-fcgi命令:

    spawn-fcgi -d /path/www -f /path/www/index.py -a 127.0.0.1 -p 9002

    注意:添加-P /tmp/webpy.pid可以记录进程id 添加-n可查看错误明细

    成功运行显示一下信息:

    spawn-fcgi: child spawned successfully: PID: 1562

    你也可以在系统中添加启动和停止脚本

    Start:

    #!/bin/sh
    spawn-fcgi -d /path/to/www -f /path/to/www/index.py -a 127.0.0.1 -p 9002

    Shutdown:

    #!/bin/sh
    kill `pgrep -f "python /path/to/www/index.py"`

    Hello world!

    将下面的代码保存为index.py或者任何你喜欢的名字

    注意,使用nginx配置,这一行是必须的 web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)

    #!/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

    运行

    1. 打开一个spawn-fcgi进程
    2. 启动nginx

    检查程序是否启动成功,可以使用以下命令 ps aux|grep index.py 进行查看

    重启nginx命令

    /path/to/nginx/sbin/nginx -s reload
    

    停止nginx

    /path/to/nginx/sbin/nginx -s stop
    

    常见问题解决

    问题1 child exited with 2

    solution: insert #!/usr/bin/env python into header of main.py

    问题2 spawn-fcgi child exited with 126

    solution: chmod +x main.py

    spawn-fcgi的常用参数说明

    -f 指定调用 FastCGI 的进程的执行程序位置,根据系统上所装的 PHP 的情况具体设置
    -a 绑定到地址 addr
    -p 绑定到端口 port
    -F 指定产生的 FastCGI 的进程数  (很多人以为是-C,其实那是PHP专用的,这里要用-F)
    -P 指定产生的进程的 PID 文件路径
    -u 和 -g FastCGI 使用什么身份运行

  • 相关阅读:
    【转】C++多继承的细节
    【转】CVE-2010-4258 漏洞分析
    【转】cve-2013-2094 perf_event_open 漏洞分析
    android CVE 漏洞汇总
    ExecutorService中submit和execute的区别
    线程池之ThreadPoolExecutor使用
    postman接口自动化,环境变量的用法详解(附postman常用的方法)转
    件测试专家分享III GUI自动化测试相关
    Linux上运行Jmeter
    时间复杂度和空间复杂度计算
  • 原文地址:https://www.cnblogs.com/ggjjl1/p/4145377.html
Copyright © 2020-2023  润新知