fastcgi,cgi

2.flup:本身是一个使用python写的web服务器软件,它可以接受nginx发来的请求,执行相应的python代码,将结果返回给nginx。flup是Python的FastCGI模块。flup 支持三种 WSGI 服务器/网关,分别为 AJP 1.3 , FastCGI ,和 SCGI 。而对于 flup 支持的这三种 WSGI 服务器/网关, flup 有分别提供了两种不同风格的版本:线程版本和进程版本。这样, flup 实际就支持六种类型的 WSGI 服务器/网关,分别为:

flup.server.ajp 
flup.server.ajp_fork
flup.server.fcgi
flup.server.fcgi_fork
flup.server.scgi
flup.server.scgi_fork
flup.server.cgi

4.cgi:通用网关接口(Common Gateway Interface/CGI)是一种重要的互联网技术,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序,请求数据。CGI 描述了客户端和服务器程序之间传输数据的一种标准。实现维基百科编辑的 CGI 程序的一个例子:首先用户代理程序向这个 CGI 程序请求某个名称的条目,如果该条目页面存在,CGI 程序就会去获取那个条目页面的原始数据,然后把它转换成 HTML 并把结果输出给浏览器;如果该条目页面不存在,CGI 程序则会提示用户新建一个页面。所有维基操作都是通过这个 CGI 程序来处理的。CGI 的工作方式,从 Web 服务器的角度看,是在特定的位置(比如:http://www.example.com/wiki.cgi)定义了可以运行 CGI 程序。当收到一个匹配URL的请求,相应的程序就会被调用,并将客户端发送的数据作为输入。程序的输出会由 Web 服务器收集,并加上合适的档头,再发送回客户端。

  5.fastcgi:快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与Web服务器通信的协议。FastCGI是早期通用网关接口(CGI)的增强版本。FastCGI致力于减少网页服务器与CGI程序之间互动的开销,从而使服务器可以同时处理更多的网页请求。CGI使外部程序与Web服务器之间交互成为可能。CGI程序运行在独立的进程中,并对每个Web请求建立一个进程,这种方法非常容易实现,但效率很差,难以扩展。面对大量请求,进程的大量建立和消亡使操作系统性能大大下降。此外,由于地址空间无法共享,也限制了资源重用。与为每个请求创建一个新的进程不同,FastCGI使用持续的进程来处理一连串的请求。这些进程由FastCGI服务器管理,而不是web服务器。 当进来一个请求时,web服务器把环境变量和这个页面请求通过一个socket比如FastCGI进程与web服务器都位于本地)或者一个TCP connection(FastCGI进程在远端的server farm)传递给FastCGI进程。

7.WSGI : WSGI 的全称为: Python Web Server Gateway Interface v1.0 (Python Web 服务器网关接口),它是 Python 应用程序和 WEB 服务器之间的一种接口,更多详细的细节,可以参考 PEP333 。它的作用,类似于FCGI 或 FASTCGI 之类的协议的作用。WSGI 的目标,是要建立一个简单的普遍适用的服务器与 WEB 框架之间的接口。WSGI 的特点是:简单、可移植等。WSGI 还只是一种规范,一种标准,它要完成的作用是用来定义 Python 应用程序要如何于apache/lighttpd/nginx 等之类的 WEB 服务器之间如何进行通信和交换信息,它不是实际可以直接拿来用的东西。而 flup 就是使用 Python 语言对 WSGI 的一种实现,是可以用于 Python 的应用开发中的一种工具或者说是一种库。除了flup Server/Gateway外还有很多其他人的写的Server/Gateway, 这个时候就会出问题了,如果你在flup上写了一个程序,现在由于各种原因你要使用xdly了,这个时候你的程序也许就要做很多痛苦的修改才能使用 xdly server了,WSGI就是一个规范,他规范了flup这个服务应该怎么写,应该使用什么方式什么参数调用你写的程序(application)等,当然同时也规范你的程序应该怎么写了,这样的话,只要flup跟xdly都遵守WSGI的话,你的程序在两个上面都可以使用了,flup就是一个WSGI server

 

====================================================

 

http://hi.baidu.com/gensoft/item/69387dc2d183b6d296445205

关于CGI:Tomcat、PHP、Perl、Python和FastCGI之间的关系

       如前文所述,Web服务器是一个很简单的东西,并不负责动态网页的构建,只能转发静态网页。同时Apache也说,他能支持perl,生成动态网页。这个支持perl,其实是apache越位了,做了一件额外的事情。

       现在我们看生成动态网页这件事情。

 

       CGI的定义是:外部应用程序与Web服务器之间的接口。

       明白了吧?也就是说,所谓的动态网页,都是要外部应用程序生成的,而不是Web服务器能干的事情。所以,最初的、最简单的CGI,是使用C来写的,很简单。

       到了后来,大家觉得老用C也不是个办法啊,效率这么慢,老板逼得紧,天天加班不是个事,于是PHP、ASP、Java、Perl、Python这些高级语言就掺合进来了。

       其中,ASP由于是微软一家单独支撑,不开源,还要买他那么贵的服务器软件,开发者就不想用了,越来越没落。

       用Java语言来写CGI,就是JSP技术

       PHP的正名为:超文本预处理语言。从这个名字可以看出,就是专门为动态网页而生的,它的好处是可以潜入HTML,而不是像C那样重新生成整个文本。这个现在已经不是优势了,JSP一样可以做到这点。PHP由于是动态加载,边解释边执行,所以效率没有java高,这个问题可以用预编译和使用C、C++模块来解决。

 

       这些语言里面,Java的发展是最迅速的,所以Java产生了一堆好东西,比如Tomcat,比如IBM的Websphere,WebSphere是真正的应用服务器,而Tomcat还算不上,因为他还不能真正支持很多J2EE的API,但是Tomcat作为servlet的容器,基本满足写CGI的需求,这样使得Tomcat被使用得非常广泛。

 

        Tomcat是apache的一个子项目,它也不务正业,也支持做web服务器的功能,这是很搞笑的,你一个动态网页处理容器,干嘛要做web服务器呢?这让我想到做产品时产品经理的贪嗔痴。但Tomcat全部使用java完成,并且,他是单进程结构,是使用CPU密集型的架构来设计的,而上篇文章讲到web服务器其实是IO密集型的,这样Tomcat在处理大规模的Web请求时,根本没法玩。所以很多人说,使用apache处理静态网页,使用tomcat处理动态网页。

 

        除了Java有Tomcat作为容器来进行支撑外,其他的CGI就很土了,都是脚本,一是需要边解释边执行,二是都是一锤子买卖,一锤子买卖的意思是,这些个脚本的CGI,都是使用其解释器+CGI部分合成一个CGI程序,apache接收到请求后,就启动一个CGI程序,生成动态内容后,CGI程序退出。这种方式也太土鳖了,让我这种长期习惯于windows编程的人非常鄙视。

 

        这种方式显然是不行的,效率非常低,所以,fastCGI就出来了,fastCGI在CGI和web服务器中间再加了一层。

        fastCGI用来管理多个CGI进程,它负责同时生成和回收多个CGI进程,以服务器的内存空间,换取处理时间。

        一个不相关的感想:不论CGI怎么变,fastCGI可以以不变应万变,如果把网页的请求过程看成产业链,fastCGI无疑是一个非常好的切入点,可以经久不衰,并且以不变应万变。

 

        经过fastCGI优化之后,从效率上讲,PHP等脚本语言与java只差一点了,这点就是解释执行,所以php需要预编译,进行代码缓存之后,效率应该可以接近jsp。

 

        另外一个问题是,nginx以减少进程的方式革了apache的命,会不会有新的程序,以nginx的方式,来革fastCGI的命呢?

 

 

 

 

http://im007.blog.51cto.com/6247769/1079694

----------26----张立---

一、分发的四种方法总结
     1、分析http报头中的字段含义:
Accept : 可以接受的数据方式比如压缩,编码等
User-Agent : 客户使用的浏览器  
Host : 客户端访问时在浏览器输入的域名或者ip。
Response Code : 200 404 500 (不同的数字代表不同的状态)
Date : 数据时间
Content-Type : 数据类型
     2、四种分发分别为:
基于host、基于uri、基于user-agent、利用反向代理
     3、反向代理的分发总结:
           a、下面的5和6将不同的请求交于远程不同的服务器去处理就是反

向代理。
           b、我的理解反向代理是一种实现分发的工具,它还需要和其它别

的条件一起来实现分发.
     4、基于host的分发总结:
           a、之前学过的apache虚拟主机也是一种基于host的分发。
           b、原理分析:由于host字段不同,所以可以将不同的域名或ip的

主页放到不同的位置,就可以实现分发。在nginx中举例如下:
                server{
                        listen  80;
                        server_name  www.zlee1.com;
                   location    /    {
                        root   /tmp/www1 ;
                        index   index.html  index.htm ;
                                    }
                       }
   ########################################
                server{
                        listen  80;
                        server_name  www.zlee2.com;
                   location    /    {
                        root   /tmp/www2 ;
                        index   index.html  index.htm ;
                                    }
                       }
       5、基于uri的分发总结:
             a、原理分析:uri既是用户请求该域名中的不同的资源,因此

将不同的资源指向不同的首页或者交给不同的服务器去处理,就可以实现分发


b、在nginx中举例如下:该例子中是匹配不同语言的主页,分别以.html 

.php   .jsp结尾,分别.html的自己处理,剩下两个交给远程两台不同的服务

器去处理。
                server{
                        listen  80;
                        server_name  www.zlee1.com;
                   location    /    {
                        root   /tmp/www ;
                        index   index.html  index.htm ;
                                    }
                   location  ~* \.php$    {
                         proxy_pass   http://ip1
                                          }
                   location  ~* \.jsp$    {
                         proxy_pass   http://ip2
                                          }
                       }

        6、基于user-agent的分发总结:
              a、原理分析:不同的浏览会在user-agent中出现不同的字段

,比如ie浏览器会出现 MSIE的字段,firefox浏览器会出现Mozolla的字段,

因此在配置文件中匹配不同的字段就可以实现分发。在nginx中举例如下:
                  server{
                        listen  80;
                        server_name  www.zlee2.com;
                   location    /    {
                        proxy_pass  http://ip1;
                   if  ($http_user_agent ~* MSIE){
                        proxy_pass  http://ip2;
                                                 }
                   if ($http_user_agent ~*Mozilla) {
                        proxy_pass  http://ip3;
                                                     }
                                     }
                         }
   
二、tomcat
        1、tomcat是一个可apache、nginx等web服务器一样,同样有处理

html语言的功能,但是最主要是处理java语言。
        2、当用户访问以.jar结尾的文件时就需要使用tamcat来处理。上述

的uri分发时已经举例,匹配以.jar结尾的文件。


三、fastcgi
        1、之前学习内容是处理php语言时,需要先安装好apache然后在

apache上加载php模块,使之可以处理php语言。
        2、而postcgi是将php做成一个独立的服务。而不依赖于apache等web

服务器。

 

四、盗链和防盗链
        1、盗链:盗链是指服务提供商自己不提供服务的内容,通过技术手

段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户

提供其它服务提供商的服务内容。 
        2、盗链的危害:网站盗链会大量消耗被盗链网站的带宽,而真正的

点击率也许会很小。
        3、防盗链原理:实现使用HTTP报头的referer,该字段可以记录来源

服务器的域名或者ip。通过匹配如果不是自己的则视为盗链。

posted @ 2013-08-27 17:37  陳聽溪  阅读(318)  评论(0)    收藏  举报