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。通过匹配如果不是自己的则视为盗链。