fastcgi 订阅
FastCGI
信息
操作系统
跨平台
开发语言
C/C++
开源协议
未知
FastCGI
fastcgi 这个技术标准作为一种替代 cgi 的技术标准, fastcgi 有如下优点(稳定,安全,高性能,方便扩展) 从稳定性上看, fastcgi 是以独立的进程池运行来 cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑. 从安全性上看, fastcgi 和宿主的 server 完全独立, fastcgi 怎么 down 也不会把 server 搞垮, 从性能上看, fastcgi 把动态逻辑的处理从 server 中分离出来, 大负荷的 IO 处理还是留给宿主 server, 这样宿主 server 可以一心一意作 IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分, 大量的图片等静态 IO 处理完全不需要逻辑程序的参与 从扩展性上讲, fastcgi 是一个中立的技术标准, 完全可以支持任何语言写的处理程序(php,java,python...)
收起全文
精华内容
下载资源
问答
  • fastcgi
    千次阅读
    2022-03-06 15:41:57

    FastCGI

    CGI

    什么是CGI

    CGI(common gateway interface)通用网关接口描述了客户端和服务器程序之间传输数据的⼀种标准,可以让⼀个客户端,从⽹⻚浏览器向执⾏在⽹络服务器上的程序请求数据。
    CGI独⽴于任何语⾔的,CGI程序可以⽤任何脚本语⾔或者是完全独⽴编程语⾔实现,只要这个语⾔可以在这个系统上运⾏。Unix shell script、Python、 Ruby、PHP、 perl、Tcl、 C/C++和 Visual Basic 都可以⽤来编写CGI程序。
    最初,CGI是在1993年由美国国家超级电脑应⽤中⼼(NCSA)为NCSA HTTPd Web服务器开发的。这个Web服务器使⽤了UNIX shell环境变量来保存从Web服务器传递出去的参数,然后⽣成⼀个运⾏CGI的独⽴的进程。

    CGI处理流程

    web浏览器 web浏览器
    | |
    |1.http request |4.http response
    | |
    web服务器 web服务器
    | |
    |2.stdin |3.stdout,stderr
    | |
    启动CGI解析器 -> 加载配置 -> 连接其他服务器 -> 逻辑处理 -> 退出

    1. web服务器收到客户端(浏览器)的请求Http Request,启动CGI程序,并通过环境变量、标准输⼊传递 数据
    2. CGI进程启动解析器、加载配置(如业务相关配置)、连接其它服务器(如数据库服务器)、逻辑处理等
    3. CGI进程将处理结果通过标准输出、标准错误,传递给web服务器
    4. web服务器收到CGI返回的结果,构建Http Response返回给客户端,并杀死CGI进程

    特点

    1. web服务器和CGI通过环境变量、标准输入、标准输出、标准错误互相传递数据。
    2. web服务器接受到多少个请求就创建多少个CGI子进程,处理完请求后退出子进程,fork-and-execute。
    3. 每个⼦进程都需要启动⾃⼰的解释器、加 载配置,连接其他服务器等初始化⼯作,这是CGI进程性能低下的主要原因。当⽤户请求⾮常多的 时候,会占⽤⼤量的内存、cpu等资源,造成性能低下。
    4. CGI使外部程序与Web服务器之间交互成为可能。CGI程序运⾏在独⽴的进程中,并对每个Web请求建 ⽴⼀个进程,这种⽅法⾮常容易实现,但效率很差,难以扩展。⾯对⼤量请求,进程的⼤量建⽴和消亡 使操作系统性能⼤⼤下降。此外,由于地址空间⽆法共享,也限制了资源重⽤。

    环境变量

    GET请求它将数据打包放置在环境变量QUERY_STRING中,可以通过getenv(“QUERY_STRING”)函数获取数据。

    环境变数含义
    AUTH_TYPE存取认证类型
    CONTENT_LENGTH由标准输⼊传递给CGI程序的数据⻓度,以bytes或字元数来计算
    CONTENT_TYPE请求的MIME类型
    GATEWAY_INTERFAC E服务器的CGI版本编号
    HTTP_ACCEPT浏览器能直接接收的Content-types, 可以有HTTP Accept header定义
    HTTP_USER_AGENT递交表单的浏览器的名称、版本和其他平台性的附加信息
    HTTP_REFERER递交表单的⽂本的URL,不是所有的浏览器都发出这个信息,不要依赖它
    PATH_INFO传递给CGI程序的路径信息
    QUERY_STRING传递给CGI程序的请求参数,也就是⽤"?"隔开,添加在URL 后⾯的字串
    REMOTE_ADDRclient端的host名称
    REMOTE_HOSTclient端的IP位址
    REMOTE_USERclient端送出来的使⽤者名称
    REMOTE_METHODclient端发出请求的⽅法(如get、post)
    SCRIPT_NAMECGI程序所在的虚拟路径,如/cgi-bin/echo
    SERVER_NAMEserver的host名称或IP地址
    SERVER_PORT收到request的server端⼝
    SERVER_PROTOCOL所使⽤的通讯协定和版本编号
    SERVER_SOFTWAREserver程序的名称和版本

    标准输入

    环境变量的⼤⼩是有⼀定的限制的,当需要传送的数据量⼤时,储存环境变量的空间可能会不⾜,造成数据接收不完全,甚⾄⽆法执⾏CGI程序。
    因此后来⼜发展出另外⼀种⽅法:POST,也就是利⽤I/O重新导向的技巧,让CGI程序可以由stdin和stdout直接跟浏览器沟通。
    当我们指定⽤这种⽅法传递请求的数据时,web服务器收到数据后会先放在⼀块输⼊缓冲区中,并且将数据的⼤⼩记录在CONTENT_LENGTH这个环境变量,然后调⽤CGI程序并将CGI程序的stdin指向这块缓冲区,于是我们就可以很顺利的通过stdin和环境变数CONTENT_LENGTH得到所有的信息,再没有信息⼤⼩的限制了。

    FastCGI说明

    什么是FastCGI

    FastCGI(Fast Common Gateway Interface)快速通用网关接口,是通用网关接口CGI的改进。描述了客户端和服务器程序之间传输数据的⼀种标准。
    FastCGI致⼒于减少Web服务器与CGI程式之间互动的开销,从⽽使服务器可以同时处理更多的Web请求。与为每个请求创建⼀个新的进程不同,FastCGI使⽤持续的进程来处理⼀连串的请求。这些进程由FastCGI进程管理器管理,⽽不是web服务器。
    nginx服务⽀持FastCGI模式,能够快速⾼效地处理动态请求。⽽nginx对应的FastCGI模块为:ngx_http_fastcgi_module。
    ngx_http_fastcgi_module模块允许将请求传递给FastCGI服务器。

    处理流程

    FastCIG进程管理器:启动CGI解析器 -> 加载配置 -> 连接其他服务器 -> 进行循环

    web浏览器
    |1
    web服务器
    |2
    FastCGI执行环境
    |3
    进入循环 -> 逻辑处理 -> 退出 -> 循环等待
    |4
    web服务器
    |5
    web浏览器

    1. Web服务器启动时载⼊初始化FastCGI执⾏环境。例如IIS、ISAPI、apache mod_fastcgi、nginx ngx_http_fastcgi_module、lighttpd mod_fastcgi。
    2. FastCGI进程管理器⾃身初始化,启动多个CGI解释器进程并等待来⾃Web服务器的连接。启动FastCGI进程时,可以配置以ip和UNIX域socket两种⽅式启动。
    3. 当客户端请求到达Web服务器时,Web服务器将请求采⽤socket⽅式转发FastCGI主进程,FastCGI主进程选择并连接到⼀个CGI解释器。Web服务器将CGI环境变量和标准输⼊发送到FastCGI⼦进程。
    4. FastCGI⼦进程完成处理后将标准输出和错误信息从同⼀socket连接返回Web服务器。当FastCGI⼦进程关闭连接时,请求便处理完成。
    5. FastCGI⼦进程接着等待并处理来⾃Web服务器的下⼀个连接。

    FastCGI特点

    1. CGI是所谓的短⽣存期应⽤程序,FastCGI是所谓的⻓⽣存期应⽤程序。FastCGI像是⼀个常驻(long-live)型的CGI,它可以⼀直执⾏着,不会每次都要花费时间去fork⼀次(这是CGI最为⼈诟病的fork-and-execute模式)。
    2. FastCGI⼦进程完成处理后将标准输出和错误信息从同⼀socket连接返回Web服务器。

    进程管理器spawn-fcgi

    什么是spawn-fcgi

    Nginx不能像Apache那样直接执⾏外部可执⾏程序,但Nginx可以作为代理服务器,将请求转发给后端服务器,这也是Nginx的主要作⽤之⼀。其中Nginx就⽀持FastCGI代理,接收客户端的请求,然后将请求转发给后端FastCGI进程。

    由于FastCGI进程由FastCGI进程管理器管理,⽽不是Nginx。这样就需要⼀个FastCGI进程管理器,管理我们编写FastCGI程序。

    spawn-fcgi是⼀个通⽤的FastCGI进程管理器,简单⼩巧,原先是属于lighttpd的⼀部分,后来由于使⽤⽐较⼴泛,所以就迁移出来作为独⽴项⽬。

    spawn-fcgi使⽤pre-fork模型,功能主要是打开监听端⼝,绑定地址,然后fork-and-exec创建我们编写的FastCGI应⽤程序进程,退出完成⼯作。FastCGI应⽤程序初始化,然后进⼊死循环侦听socket的连接请求。

    spawn-fcgi源码包下载地址:http://redmine.lighttpd.net/projects/spawn-fcgi/wiki

    fcgi开发套件

    使⽤C/C++编写FastCGI应⽤程序,可以使⽤FastCGI软件开发套件或者其它开发框架,如fcgi。
    fcgi下载地址:wget https://fossies.org/linux/www/old/fcgi-2.4.0.tar.gz

    FastCIG编译测试

    nginx 设置

    nginx需要在源码编译的时候加入fastcgi—module

    location /test {
        fastcgi_pass 127.0.0.1:8001; 
        fastcgi_index test;
        include fastcgi.conf;
    }
    

    重新加载配置

    /usr/local/nginx/sbin/nginx -s reload

    测试代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include "fcgi_stdio.h"
    
    int main(int argc, char *argv[])
    {
        int count = 0;
    
        //阻塞等待并监听某个端⼝,等待Nginx将数据发过来
    
        while (FCGI_Accept() >= 0)
        {
            //如果想得到数据,需要从stdin去读,实际上从Nginx上去读
            //如果想上传数据,需要往stdout写,实际上是给Nginx写数据
    
            printf("Content-type: text/html\r\n");
            printf("\r\n");
            printf("<title>Fast CGI Hello!</title>");
            printf("<h1>Fast CGI Hello!</h1>");
            //SERVER_NAME:得到server的host名称
            printf("Request number %d running on host <i>%s</i>\n",
            ++count, getenv("SERVER_NAME"));
        }
    
        return 0;
    }
    

    编译启动

    root@VM-0-16-ubuntu:/usr/local/nginx/sbin# lsof -i:8001
    root@VM-0-16-ubuntu:/usr/local/nginx/sbin# cd /home/workplace/0voice_tuchuang/learn_test/
    root@VM-0-16-ubuntu:/home/workplace/0voice_tuchuang/learn_test# gcc fastcgi_src.c -o fastcgi_src -lfcgi
    root@VM-0-16-ubuntu:/home/workplace/0voice_tuchuang/learn_test# ldconfig
    root@VM-0-16-ubuntu:/home/workplace/0voice_tuchuang/learn_test# spawn-fcgi -a 127.0.0.1 -p 8001 -f ./fastcgi_src
    spawn-fcgi: child spawned successfully: PID: 5926
    root@VM-0-16-ubuntu:/home/workplace/0voice_tuchuang/learn_test# lsof -i:8001
    COMMAND    PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
    fastcgi_s 5926 root    0u  IPv4 15752309      0t0  TCP localhost:8001 (LISTEN)
    
    更多相关内容
  • 节点fastcgi 该模块是节点标准HTTP模块(仅服务器)的直接替代。 使用FastCGI无需更改为http服务器编写的代码即可正常工作。 它可用于构建FastCGI应用程序或将现有的节点应用程序转换为FastCGI。 该实现完全符合。...
  • 近日,需要满足测试需求,进行大数据并发测试时,报出【HTTP 错误 500.0 – Internal Server Error E:\PHP\php-cgi.exe – FastCGI 进程超过了配置的活动超时时限】 解决办法: IIS7->FastCGI设置->双击”...
  • FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。 PHP-CGI:是 PHP (Web Application)对 Web Server 提供的 CGI 协议的接口程序。 PHP-FPM:是 PHP(Web Application)对 Web Server 提供的 ...
  • 一文读懂cgi、fastcgi、php-cgi、php-fpm的区别CGI诞生之前CGI的诞生CGI程序如何工作Web服务器的内置模块FastCGIphp-fpmphp-cgiphp-cgi与php-fpm的区别 CGI诞生之前 在CGI诞生之前Web服务器负责静态文件的存储、查找...
  • 在IIS7.0上以FastCGI方式配置好PHP运行环境,测试可以正常运行PHP程序后,将PHP程序部署上去,导入程序原来的数据和配置信息。很快就有问题出来啦下面我们就详细记录下。
  • 在centos上成功编译安装nginx 1.4、php 5.4并成功启动nginx和php-fpm后,访问php提示”File not found.”,同时在错误日志中看到: 代码如下:2013/10/22 20:05:49 [error] 12691#0: *6 FastCGI sent in stderr: ...
  • Python FastCGI客户端 Python FastCGI客户端,用于通过FastCGI直接访问FastCGI Web资源 如何使用?(您应该开始FastCGI流程) from FastCGIClient import * client = FastCGIClient('127.0.0.1', 9000, 3000, 0) ...
  • 主要介绍了FastCGI 进程意外退出造成500错误的相关资料,需要的朋友可以参考下
  • 关于这个项目Golang fastcgi 在 Docker 上由 Nginx 提供服务。克隆子存储库 cd golang-fastcgi-nginxgit clone git@github.com:eyasuyuki/golang-docker.gitgit clone git@github.com:eyasuyuki/nginx.git使用 ...
  • 【详细错误】:HTTP 错误 500.0 – Internal Server ErrorC:\Program Files\PHP\php-cgi.exe – FastCGI 进程超过了配置的请求超时时限【环境】:php + IIS7.5解决办法:方法一:C:\Windows\System32\inetsrv\config...
  • lighttpd fastcgi

    2018-07-24 11:33:56
    5.注意fastcgi程序编译方式 进入cgi-bin目录中编译方式如下 2228 gcc -o caoft.fcgi echo.c -lpthread -lfcgi 2229 gcc -o caoft.fcgi size.c -lpthread -lfcgi 2230 gcc -o caoft.fcgi threaded.c -lpthread -...
  • 目录 1、准备两个tomcat和一个nginx ...2、反向代理proxy_pass 2.1、反向代理 2.2、反向代理-使用upstream ...3、网关代理fastcgi_pass(php+nginx配合) 3.1、php安装(本人安装的是php-7.3.1) 3.1.1、php下载 3.1
  • 将php默认的FastCGI模式改成ISAPI模式
  • fastcgi by c 1、修改fcgi_un.c文件中unixSocket为本机socket文件位置 2、修改fcgi_un.c文件中scriptFile为本机请求的php文件位置 3、gcc -o fcgiun fcgi_un.c 4、./fcgiun
  • 为易语言编写IIS FastCGI程序提供便利,使用本库前需了解FastCGI的安装方法和使用方法.FastCGI下载地址:http://www.iis.net/download/FastCGI。 操作系统支持: Windows
  • 说到FastCGI,大家都知道这是目前最常见的webserver动态脚本执行模型之一。目前基本所有web脚本都基本支持这种模式,甚至有的类型脚本这是唯一的模式(ROR,Python等)。 FastCGI的主要目的就是,将webserver和动态...
  • fastcgi_finish_request(); echo ‘To be, or not to be, that is the question.’; file_put_contents(‘log.txt’, ‘生存还是毁灭,这是个问题。’); ?> 通过浏览器(不是命令行!)运行此脚本,结果发现并...
  • FastCGIFastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发访问时,几乎...
  • 节点-fastcgi-客户端 Node.js中的FastCGI客户端实现,主要设计用于PHP的累积量。 发展状况 发展。 很快就会稳定。 原料药 npm install fastcgi-client 。 使用require('fastcgi-client')获得一个fastcgiConnector 。...
  • 之前在Windows Server 2008中配置PHP的时候安装过一个FastCGI的安装文件,今天在Windows7中安装FastCGI时却告知版本不支持,后来查了一下,原来Windows Server 2008默认是IIS7.0,IIS7.0默认不自带FastCGI,所以需要...
  • FastCGI 进程最近常常失败。请过一会再尝试此请求 详细错误信息 模块 FastCgiModule 通知 ExecuteRequestHandler 处理程序 PHP for FastCgi 错误代码 0x80004005 请求的 URL http://piaoyun.cc:80/index.php 物理...
  • fastcgi.zip

    2019-12-28 20:01:04
    fastcgi2.4.1 安装: ./configure make make install 现在官网已经没有了
  • windows2003 + IIS6.0 环境下以Fastcgi方式配置php .docx
  • 主要介绍了PHP(FastCGI)在Nginx的alias下出现404错误的解决方法,涉及nginx平台的相关配置技巧,需要的朋友可以参考下
  • java多线程tcp socket server源码
  • FastCGI包装器(原始文件来自描述的链接,即 。该文件归于Denis S菲利莫诺夫) 这些脚本旨在与Apache的mod_fcgid一起使用。 如果没有对守护代码进行注释,并且套接字已更改为TCP / IP 1,则它们也可以与nginx一起...
  • 本篇文章是对解决(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题进行了详细的分析介绍,需要的朋友参考下
  • 每在页面中上传较大的文件时遇到FastCgi的错误:“The FastCGI process exceeded configured request timeout”,几经试验,明白了需要修改FastCgi的配置文件“fcgiext.ini”,位于目录“C:/WINDOWS/system32/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 108,085
精华内容 43,234
关键字:

fastcgi