fastCGI使用

1.http解释

        在使用fastCGI之前需要先了解什么是http,以及静态请求和动态请求。

1.什么是http

        HTTP是超文本传输协议,它定义了客户端和服务器端之间文本传输的规范。HTTP通常运行在TCP之上,使用80端口。HTTP是一种简单的请求-响应协议,客户端向服务器发送请求,服务器返回相应的文件或数据作为应答。HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。HTTP是一种面向对象的协议,允许传送任意类型的数据对象。

2.静态请求和动态请求

        静态请求和动态请求是指客户端向服务器请求的资源类型不同。
        静态请求是指请求的资源是固定的,不需要后台程序处理,如html、css、js、图片等文件。
        动态请求是指请求的资源是根据用户的不同需求而动态生成的,需要后台程序处理,如php、jsp、asp等文件。
        静态请求和动态请求的区别在于:
            静态请求的响应速度快,动态请求的响应速度慢。
            静态请求的交互性差,动态请求的交互性好。
            静态请求的内容存在于页面上,动态请求的内容存在于数据库中。
            静态请求的网址一般以.html结尾,动态请求的网址一般带有?或&符号。

3.请求头和响应头

        请求头和响应头是HTTP消息中的一部分,用于在请求和响应中传递附加信息。
        请求头是客户端向服务器发送的标头,包含有关请求、客户端或请求资源的信息。
        响应头是服务器向客户端发送的标头,包含有关响应、服务器或响应资源的信息。
        请求头和响应头都由标头名称和标头值组成,中间用冒号分隔,如Content-Type: text/html。不同的标头有不同的作用,例如:
    Allow:标头表示服务器支持哪些请求方法(如GET、POST等)。
    Content:Type 标头表示响应的内容类型(如text/html、image/jpeg等)。
    Location:标头表示客户端应该重定向到哪个URL。
    Cookie 标头表示客户端发送给服务器的Cookie。
    Set-Cookie 标头表示服务器发送给客户端的Cookie。

2.fastCGI

        概念:快速通用网关接口,FastCGI是一种二进制协议,用于将交互式程序与web服务器接口连接。它是早期的通用网关接口(CGI)的变体之一。FastCGI主要的目的是减少与web服务器和CGI程序接口相关的开销,使服务器能够处理更多的网页请求。在Internet Information Services7中包括了FastCGI组件,它提供了更高的可靠性和更好的性能,并允许您在IIS 7上运行PHP应用程序框架以及其他Web应用程序框架。(本质上就是把服务器处理不了的请求处理,并且转发给客户端)

 作用
        1. 减少进程启动时间:由于CGI在每个请求时都需要启动新的进程,在高并发的情况下,进程的启动时间将成为性能瓶颈。FastCGI通过保持应用程序进程的状态来避免这种情况。
        2. 改善资源利用率:由于FastCGI可以使用工作进程或线程来处理请求,因此它可以更有效地利用系统资源,从而提高系统的性能。
        3. 提高服务器负载能力:由于FastCGI所需的系统资源较少,一个Web服务器可以处理更多的客户端请求。
        4. 支持多种编程语言:FastCGI是一种通用的协议,它可以支持多种编程语言,包括PHP、Perl、Python等。
        5. 提供更好的安全性和可靠性:FastCGI可以通过SSL协议进行数据加密,从而提高Web应用程序的安全性;同时,FastCGI提供了可靠的错误处理,防止应用程序出现严重问题时无法正常工作。
        6. 提供更好的安全性和可靠性:FastCGI可以通过SSL协议进行数据加密,从而提高Web应用程序的安全性;同时,FastCGI提供了可靠的错误处理,防止应用程序出现严重问题时无法正常工作。

FastCGI的工作流程如下:
    1. Web服务器启动FastCGI主进程,该进程会等待Web服务器的请求。
    2. 当有请求到达Web服务器时,Web服务器将该请求采用socket方式转发给FastCGI主进程。
    3. FastCGI主进程选择并连接到一个CGI解释器(关联FastCGI子进程),然后将CGI环境变量和标准输入发送到FastCGI子进程中。
    4. FastCGI子进程执行具体的CGI程序,并将CGI程序产生的输出返回给FastCGI主进程。
    5. FastCGI主进程将CGI程序的输出发送回Web服务器。
    6. Web服务器将FastCGI返回的HTML结果返回给客户端。

1.工具下载

        fastCGI安装包下载网址:这里

        spawn-fcgi安装包下载:这里

2.安装

        在这里使用了 fcgi-2.4.1-SNAP-0910052249.tar.gz以及spawn-fcgi-1.6.4.tar.gz 这两个包

使用命令解压安装

解压
tar -zxvf  fcgi-2.4.1-SNAP-0910052249.tar.gz
tar -zxvf  spawn-fcgi-1.6.4.tar.gz 
进入到解压出来的文件夹安装
1.make
2.sudo make install

3.fastcgi的使用

        1.部署静态网页

                  网页可以在网上下载,并且安装我之前发布的文章部署,可参考这篇文章

        2.部署nginx配置

              在这里fastcgi是处理nginx服务器处理不了的请求,需要在nginx配置文件中增加一些内容

location /Myupload #/Myupload这里需要和客户端提交的处理指令一致
    {
        fastcgi_pass 127.0.0.1:10000;    #指定转发的服务器IP以及端口
        include fastcgi.conf    #表示添加的启动配置文件
    }

        3.启动fastcgi程序

                在这里需要编写一个fastcgi的程序,这里fastcgi的软件包提供了一个测试程序,进入到上面解压出来的目录,如图,在examples目录中有echo.c程序,这是一个测试程序

        编译该程序命令

gcc echo.c -o app -lfascgi

        使用 ldd app 命令可以查看是否找到了所有的动态库

        如果没有找到需要的动态库可以进入到 usr/local/lib 目录下查看是否存在

        启动该程序命令

# 命令
spawn-fcgi -a 需要和nginx.conf配置的ip地址一致 -p 需要和nginx.conf配置的端口号一致 -f 可执行程序
# 样例
spawn-fcgi -a 127.0.0.1 -p 10000 -f ./app

        如果出现下面的提示,表示启动成功

         客户端(即浏览器)发送来的处理请求可以在日志目录logs中的错误日志文档查看

4.fastcgi程序

        要使fastcgi可以实现处理客户端(浏览器)的动态请求,还需要自己编写fastcgi程序,该程序需要根据具体要求,具体实现,实现步骤如下:

 // 要包含的头文件
   #include "fcgi_config.h" // 可选
   #include "fcgi_stdio.h" // 必须的, 编译的时候找不到这个头文件, find->path , gcc -I
   // 编写代码的流程
   int main()
   {
       // FCGI_Accept()是一个阻塞函数, nginx给fastcgi程序发送数据的时候解除阻塞
       while (FCGI_Accept() >= 0) 
       {
           // 1. 接收数据
           // 1.1 get方式提交数据 - 数据在请求行的第二部分
           // user=zhang3&passwd=123456&age=12&sex=man
           char *text = getenv("QUERY_STRING"); 
           // 1.2 post方式提交数据
           char *contentLength = getenv("CONTENT_LENGTH");
           // 根据长度大小判断是否需要循环
           // 2. 按照业务流程进行处理
           // 3. 将处理结果发送给nginx
           // 数据回发的时候, 需要告诉nginx处理结果的格式 - 假设是html格式
           printf("Content-type: text/html\r\n");
           printf("<html>处理结果</html>");
       }
   }

猜你喜欢

转载自blog.csdn.net/weixin_62859191/article/details/130001272
今日推荐