zoukankan      html  css  js  c++  java
  • nginx上用fastcgi配置python环境

       费了2天的功夫,翻阅了无数的中文、英文资料,终于搞定。写下此文留待以后翻阅用

         本文环境,centOS 5.4 ,Nignx-0.8.49, Python 2.6.5
     
    =====================================================================================
           WSGI是Python应用程序或框架和Web服务器之间的一种接口,已经被广泛接受, 它已基本达成它了可移植性方面的目标。  
          WSGI 没有官方的实现, 因为WSGI更像一个协议. 只要遵照这些协议,WSGI应用(Application)都可以在任何实现(Server)上运行, 反之亦然。
     
         WSGI具体实现有很多种方法,网上有很多的用python写的框架,比如facebook的tornado,我用的是flup,具体的介绍可以到 http://pypi.python.org/pypi/flup/1.0
     
         对于WSGI的深入理解可以参考本博客的另一篇文章:
     
         cd /usr/local/src
         wget http://pypi.python.org/packages/2.5/f/flup/flup-1.0-py2.5.egg#md5=3c9368437e9bffb950c6cce54425d32f
         tar -xzvf flup-1.0.3.dev-20100525.tar.gz
         cd     flup-1.0.3.dev-20100525
         python setup.py install
         到此flup安装完毕
    =====================================================================================
     以上是准备工作,下面正式开始
      
     配置nginx,找到nginx.conf
     添加一段如下代码
     server
      {
        listen  8000;
       server_name test.com;
        location /
        {
           #fastcgi_pass  unix:/tmp/python-cgi.sock;(注1)
          fastcgi_pass  127.0.0.1:8008; (注意这里的端口和上面的listen的8000端口要不一样,否则会报地址已占用的错)
          fastcgi_param SCRIPT_FILENAME "";
          fastcgi_param PATH_INFO $fastcgi_script_name;
          include fcgi.conf;
        }
      }
     
    注1:这里最好是用127.0.0.1:8000代替,这样的话就没有访问权限的限制,如果用的是python-cgi.sock,还得chmod 777 python-cgi.sock才可以,不然的话浏览器会出现505的内部错误。
     
     引用原文如下:A Web server can connect to a FastCGI server in one of two ways: It can use either a Unix domain socket (a “named pipe” on Win32 systems), or it can use a TCP socket. What you choose is a manner of preference; a TCP socket is usually easier due to permissions issues.
     
     
     然后我们再写一个fcgi.py,代码如下
    #!/usr/bin/python
    # encoding : utf-8
     
    from flup.server.fcgi import WSGIServer
     
    def myapp(environ, start_response):
        start_response('200 OK', [('Content-Type', 'text/plain')])
        return ['Hello World! ']
     
    if __name__  == '__main__':
       WSGIServer(myapp,bindAddress=('127.0.0.1',8008)).run()(注2
      
    注2,看到了吗,这里的bindAddress 的值是一个元组,这个是WSGIServer的源代码要求这么写的,而且它的值对应的是上面fastcgi-pass的值
     
    然后我们就可以运行python fcgi.py --method=prefork/threaded minspare=50 maxspare=50 maxchildren=1000 (注3)
    注3:后面的那些参数相当于php-cgi后面的参数,但是具体的用途还需要进一步探索
     
    运行到这了,我们就可以在浏览器里面敲: http://localhost:8000
    如果返回 Hello World,恭喜你,迈出了nginx 运行python的第一步
     
    ============================================================================================================

    前几天写了   nginx上用fastcgi配置python环境(一),在那篇文章里面我用的是最简单的配置,在这篇文章里面我将进一步介绍

     
    需要的软件 : Linux ,
                        nginx ,
                        spawn-fcgi(一个fastcgi的管理工具) ,
                        flup(用python写的实现WSGI的模块,这个很重要,详细介绍http://pypi.python.org/pypi/flup/1.0),
                        
    ===============================================================================================
     
    下载安装好上面说的软件。nginx配置这些和上一篇文章的一样,就不说了
    说说spawn-fcgi : spawn-fcgi  -f /data/www/python/fcgi.py -a 127.0.0.1 -p 8008  -F 5 -P /var/run/fcgi.pid -u www
                          
                       -f 要执行的文件(不理解的可以思考php-cgi这个命令)
                       -a 监听的地址
                       -p 监听的端口(这个不是nginx监听的网络端口,而是nginx的fastcgi-pass传过来的端口)
                       -F fastcgi开启的进程数(不理解的可以思考下php的php-cgi数目)
                       -P 开启的进程的进程号所写入的文件(有了这个就可以很轻松的杀掉开启的fasgcgi)
                       -u  以什么用户身份运行(这里有root会报错,不知道什么原因)
     
     
    ===============================================================================================
    下面上代码,代码很简单
     
    #!/usr/bin/python
     
    import flup.server.fcgi as flups
     
    def myapp(environ, start_response):   
        start_response('200 OK', [('Content-Type', 'text/plain')])
        return ["how do you do "]
        
    if __name__  == '__main__':
        #WSGIServer(myapp,bindAddress=('127.0.0.1',8008)).run()(如果是直接用flup而不用fastcgi就用它)
        flups.WSGIServer(myapp).run() (如果是fastcgi的话就用它)
     
     
    在浏览器输入 http://localhost:8000
    如果返回 how do you do ,恭喜你,迈出了nginx 运行python的第二步
  • 相关阅读:
    给linux用户分配docker权限
    alpine安装docker
    linux开机自启动配置
    virtualbox vdi硬盘扩容
    树莓派更新软件源的脚本
    原生js选中下拉框中指定值
    linux环境tomcat开启远程调试
    Vue2 和 Yii2 进行前后端分离开发学习
    httpd.conf文件中找不到Deny from all这句,怎么配置多站点
    yii2.0 advanced 学习教程
  • 原文地址:https://www.cnblogs.com/DjangoBlog/p/4442119.html
Copyright © 2011-2022 走看看