ubuntn 配置webpy nginx

webpy环境搭建

在开始webpy搭建之前,有必要熟悉一下什么是fastcgi,因为搭建环境时都是使用这个模式去运行webpy程序的,具体的fastcgi描述可以参考各种百科;fastcgi协议官网(http://www.fastcgi.com/drupal/)上面描述一些基础信息,fastcgi的api、开发,fastcgi的实现程序,支持fastcgi的web服务器等等。

除了fastcgi之外还有一些其他的相关名词:cgi、fastcgi、wsgi。gi是gateway interface的缩写,所以前面3个都是属于一个大类型、一种规范;至于具体规范的谁、怎么规范的会有各自的不同。

cgi和fastcgi规范的都是http server与对应解释程序的之间的通信;比如apache与Python、nginx与python等。只是它们规范的方式不一样;cgi是最原始的公用通信协议,它规定的是每次有请求就会新起一个应用进程来处理,在请求结束后关闭应用进程【导致反复新起进程、关闭进程,消耗系统资源】;fastcgi是cgi的扩展,目的就是解决cgi的这种资源消耗的弊端,它规定http server启动时同时启动了若干个应用进程【应用进程数可配置】,然后常驻内存等待接收请求并处理,处理完请求后继续等待不会退出。

由于cgi是直接对接那些有标准输出的应用即可,sh、tcl等;所以使用cgi协议时可以直接调用应用程序来启动应用进程,在执行结束后获得标准输出作为返回的html内容。而fastcgi则实现了固定的通信机制,它不能通过直接调用应用程序来执行结果,所以就需要一个支持fastcgi协议的web server/gateway来与之通信;这样请求就会通过fastcgi进程传输给特定的web请求处理程序【flup】,这个程序会根据业务逻辑处理请求并返回结果;最终通过fastcgi返回给前端的http server。

然后再看看fastcgi和wagi的关系,其实它们没有关系,虽然都是规范,但它们规范的不是一个地方,所以没有直接可关联的,唯一可关联的就是,有些程序会同时实现了这2种协议,比如:flup

fastcgi是通信规范,规定了通信的方式、协议;而wsgi是接口规范,规定了函数定义、调用。

最后还有一个spawn-fcgi,这是一个fastcgi进程管理器【最初是lighttpd的子模块,lighttpd也是一个与nginx类似的http server】,作用等同于其它http server中的fastcgi模块;只不过它实现的比较好、在某些情况下的效能会比较高,所以被大家分离出来广泛使用,以致独立出来作为一个项目。【所以就有了apache+spawn-fcgi、nginx+spawn-fcgi等】

下面总结了一张图,大概覆盖了上面所说的。

通常搭建webpy都是想使用它的fastcgi模式,因此搭建webpy可以有2套方式运行:一是web服务+flup,二是web服务+spawn-fcgi+flup。又因为spawn-fcgi只有linux版本,所以windows下只能使用第一种方式搭建webpy,而linux下则可以使用第二种方式。下面内容简述了这2种方式的搭建过程,web服务器使用的是nginx,官网更多webpy服务的搭建见http://webpy.org/cookbook/index.zh-cn 部署章节,里面还包括apache、lighttpd等服务器的fastcgi搭建。\

2、nginx配置熟悉
因为使用nginx服务,所以有必要先熟悉一下nginx服务器的简单配置,否则配置过程中出现问题时就会手忙脚乱了,安装完成nginx后其默认的配置文件里会有几种默认配置和注释说明,不过是英文的,这里有一个比它更详细的中文版:http://my.oschina.net/duxuefeng/blog/34880 
注:修改前先备份一个原始的文件

flup中相关下载和配置如下:http://tool.oschina.net/uploads/apidocs/nginx-zh/PythonFlup.htm

3、环境部署
webpy官网搭建说明见:http://webpy.org/cookbook/fastcgi-nginx.zh-cn

python、webpy、flup、nginx分别默认安装即可,完成后测试各软件默认安装是否正常,如果正常则开始修改nginx配置,添加配置一个虚拟主机(在/etc/nginx/sites-available目录下新建一个文件,文件名可以自定义,如:example),内容如下:

  1. server{
  2. listen       80;
  3. server_name  www.test.com;
  4. root /path/to/web/root;
  5. access_log  logs/www.xx.com.access.log  main;
  6. location / {
  7. include fastcgi_params;   ##包含默认的fastcgi参数
  8. fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
  9. fastcgi_param PATH_INFO $fastcgi_script_name;
  10. fastcgi_pass 127.0.0.1:9002;                  ##把请求通过fastcgi传送给本机的9002端口
  11. }
  12. location /static/ {                    #配置静态文件的访问
  13. if (-f $request_filename) {        #如果请求文件名是一个文件
  14. rewrite ^/static/(.*)$  /static/$1 break;   #直接跳转到对应的资源,中断fastcgi的传输
  15. }
  16. }
  17. }

完了重载nginx配置,nginx -s reload,为了保险起见,也可以如下操作:

1、先测试一下nginx.conf文件:./nginx -t   
2、没有问题在停止服务 ./nginx -s stop
3、启动服务 ./nginx

此时可以直接访问www.test.com,如果出现如下页面则表示配置nginx的fastcgi格式正确,可以继续后面的配置

新建一个py文件,比如code.py,用来接收web请求并处理之,其内容可以如下:

[python] view plain copy

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import web
  4. urls = ("/.*", "hello")
  5. app = web.application(urls, globals())
  6. class hello:
  7. def GET(self):
  8. return ‘Hello, world!‘
  9. if __name__ == "__main__":
  10. app.run()

运行python程序,python code.py 9002 fastcgi
注:上面的nginx配置文件里配置的是9002,这里开启的就是9002,要保持一致否则就接不上了。
通过浏览器访问localhost,看看是不是返回了Hello, world!

这里会有一些问题,还要有如下配置:

  (1)将nginx/sites-available中自定义的文件在sites-enabled中建立一个文件映射

  sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/example

  (2)删除sites-enabled中的default

  rm /etc/nginx/sites-enabled/default

  (3)重启nginx服务和相关应用

  service nginx restart

上面是以方式一搭建的,如果使用方式二搭建,则还需要安装spawn-fcgi,然后修改code.py文件的内容,添加一句代码,全部内容如下:

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. import web
  4. urls = ("/.*", "hello")
  5. app = web.application(urls, globals())
  6. class hello:
  7. def GET(self):
  8. return ‘Hello, world!‘
  9. if __name__ == "__main__":
  10. web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)   ##这行是新增的
  11. app.run()

然后启动spawn-fcgi程序即可,即不需要直接以fastcgi方式运行code.py文件,而是通过运行spawn-fcgi程序来间接启动code.py程序,启动的命令如下:
spawn-fcgi -d /path/to/www -f /path/to/www/code.py -a 127.0.0.1 -p 9002   #端口和nginx配置里要一致
-f 指定调用FastCGI的web文件,web程序的入口文件,即code.py文件
-d 指定web程序的主目录,即code.py所在的目录
-a 绑定到地址 addr
-p 绑定到端口 port
-F 指定产生的 FastCGI 的进程数
-P 指定产生的进程的 PID 文件路径
-u 和 -g FastCGI 使用什么身份运行
可以将进程PID保存下来方便关闭进程:
kill `cat /tmp/zcut.pid`

比如:
spawn-fcgi -u www -g www -p /tmp/spwn.pid -F 10 -d /path/to/www -f /path/to/www/code.py -a 127.0.0.1 -p 9002
在127.0.0.1的9002端口以www身份启动webpy服务,webpy主程序路径为/path/to/www/code.py,webpy的程序主目录为/path/to/www/,总共启动了10个spawn进程,所有的进程id将存放在/tmp/spwn.pid文件里

时间: 2024-10-04 15:40:49

ubuntn 配置webpy nginx的相关文章

webpy+nginx+uwsgi安装配置

转:(1)安装Nginx1.1 下载nginx-1.0.5.tar.gz并解压1.2 ./configure (也可以增加--prefix= path指定安装路径)此时有可能会提示缺少pcre支持,如果要安装pcre的话可以通过 yum install pcre-devel 来实现安装1.3 make1.4 make install (2)安装uWSGI2.1 下载uwsgi-0.9.8.2.tar.gz并解压2.2 make在安装uWSGI的时候有可能提示说是libxml2不存在,针对此情况,

linux学习笔记——搭建基于nginx的web服务器、多核配置、nginx配置参数

############ 认识nginx #############Nginx:(发音同 engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler(俄文:Рамблер)使用.  其优点是轻量级(占有内存少),高并发(并发能力强),事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.目前中国大陆使用ngi

安装配置优化nginx

二. 1.编译安装nginx 1)采用yum安装pcre: yum install pcre pcre-devel -y rpm -qa pcre pcre-devel 2)检测安装依赖包: rpm -qa openssl openssl-devel 安装openssl openssl-devel: yum install -y openssl openssl-devel 3)开始安装nginx: mkdir -p /application/server cd /application/serv

虚拟主机ip配置,nginx.conf文件配置及日志文件切割

今天粗略整理了一下虚拟主机配置,nginx.conf文件的配置,及日志文件的切割,记录如下: nginx虚拟主机配置:1.IP地址配置,2.绑定ip地址和虚拟主机详情:1.ip地址的配置:ifconfig eth0 192.168.0.15 netmast 255.255.255.0虚拟ip及对应server块基本配置:ifconfig eth0:1 192.168.0.180 broadcast 192.168.0.255 netmask 255.255.255.0ifconfig eth0:

ELK最新版实战配置检索nginx日志

说明: 本文只是对相应的功能进行简介,并不会具体介绍部署方案,因为所有的包都是使用的tar.gz格式解压直接可用的,如果有什么不懂的地方或是本人有说错的地方,欢迎大家提问和质疑,也欢迎大家一起交流学习. 环境: OS:ubuntu14.0 Kernel:3.13.0-24-generic logstash:1.5.1 elasticsearch:1.6.0 kibana:4.1 nginx:1.9.1 tomcat:7.0 java:1.7.0 Step1: 所有ELK的安装包都可以去官网下载,

centos7下linux运行asp.net,c#网站搭建配置-mono+nginx

centos7下linux运行asp.net,c#网站搭建配置-mono+nginx 一.首先安装一些需要的软件包 首先更新CentOS上的软件包: yum –y update 安装一些需要的库: yum -y install gcc gcc-c++ bison pkgconfig glib2-devel gettext make libpng-devel libjpeg-devel libtiff-devel libexif-devel giflib-devel libX11-devel fr

webpy + nginx + fastcgi 构建python应用

1.准备环境 CentOs  6.3 nginx-1.4.2.tar.gz            http://nginx.org/download/nginx-1.4.2.tar.gz openssl-1.0.1c.tar.gz       http://www.openssl.org/source/openssl-1.0.1c.tar.gz pcre-8.34.tar.gz              ftp://ftp.csx.cam.ac.uk/pub/software/programmi

两种web最简单的负载均衡配置(nginx haproxy)

-------------------------------------------------------------- Centos 6.6 环境  php  http://lampol.blog.51cto.com/11662628/1851016 -------------------------------------------------------------- 负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器

Centos安装配置HAProxy+Nginx环境

在测试环境安装了一下Nginx(作为http服务器)和HAProxy(反向代理),并配置HAProxy的日志输出到/var/log/haproxy.log,笔记一下. 需要说明的是,这里仅涉及基本的安装.配置方法,并不涉及生产环境中的具体用法. 一.安装Nginx 1.准备环境 yum install -y gcc      #一般都有 yum install -y gcc-c++  #非必须 yum install -y pcre pcre-devel  #正则匹配 yum install -