前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FastCGI简介

FastCGI简介

作者头像
全栈程序员站长
发布2022-09-14 15:14:54
8380
发布2022-09-14 15:14:54
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

FastCGI实际上是以CGI变化而来的。因此,首先要了解CGI,下面通过介绍FastCGI来详细了解。

CGI是一个协议,他描述了web服务器(nginx)和应用程序网关(php,python,等等)之间的信息交换

。在实践中,当web服务器收到一个应该转发到该程序网关的请求时,只是简单的执行所需的命令(所需的

应用程序)。客户端请求的详细信息通过命令行参数或环境变量来传递,然而实际的数据则通过标准的输入设备利用POST或PUT方法来传递,在调用应用程序,然后将处理完的文本内容写入标准的输出设备,最后内容由web服务器重新捕获。

这种技术看上去简单并且足够有效,但它也存在一些明显的不足。

1,为每一个请求产生一个唯一的进程,从一个请求到另一个请求,内存和其他的信息将全部丢失;

2,开启一个进程会消耗系统的资源,大而重的并发请求(每一个产生的进程)数量很快会使服务器一团糟;

3,很难设计一个架构,从而把web服务器和应用程序网关放在不同的服务器上。

FastCGI

CGI协议相关服务效率低下,为了寻求解决方法,产生了FastCGI。

虽然目的一样,但是fastcgi做了重大的改进,他基于下面的原理。

  1. fastcgi使用了能够处理多个请求的持续进程,而不是针对每个请求都产生新的进程。
  2. web服务器和应用程序网关通信是通过TCP套接字或POSIX本地IPC套接字进行的,因此,两个进程可能在网络上的不同计算机中。
  3. web服务器将客户断请求转发到应用程序网关,并使用单个连接来收到响应,其他的请求也可以跟进,从而不用再为其他的请求建立连接。注意,在大部分web服务器上,包括nginx和apache,fastCGI的执行不支持多路技术。
  4. fastcgi是一个基于套接字的协议,因此他能够适用于任何平台及任何编程语言。

主要指令

在默认情况下,fastcgi模块包含在已编译的nginx中,不用在编译时手动开启。

fastcgi_pass 使用环境 location,if

指定什么请求应该转递飞fastcgi服务器,具体做法是先定义fastcgi_pass,然后再在location中应用。

语法:

对于TCP套接字 fastcgi_pass hostname:port

对于unix套接字 fastcgi_pass unix:/path/to/fastcgi.socket;

也可以参考upstream块 fastcgi_pass myblock;

示例:

fastcgi_pass localhost:9000

fastcgi_pass 127.0.0.1:9000

fastcgi_pass unix:/tmp/fastcgi.socket;

#upstream块

upstrwam fastcgi {

server 127.0.0.1:9000

server 127.0.0.1:9000

}

location ~* \.php$ {

fastcgi_pass fastcgi;

}

fastcgi_param 使用环境:http,server,location

允许配置传递给FastCGI服务器的请求。对于所有FastCGI的要求,有两个参数必须的

SCRIPT_FILENAME和QUERY_STRING。

示例:

fastcgi_param SCRIPT_FILENAME /home/website.com/www$fastcgi_script_name;

fastcgi_pass_header 使用环境:http,server,location

指定传递到fastcgi服务器额外的头信息。

语法:fastcgi_pass_header headername;

fastcgi_hide_header 使用环境:http,server,location

指定fastcgi服务器应该隐藏的头信息。

语法:fastcgi_hide_header headername;

fastcgi_index 使用环境:http,server,location

fastcgi服务不支持自动 目录索引–如果uri请求以/结尾。

语法:fastcgi_index 文件名。

示例:fastcgi_index index.php;

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/157668.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年7月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档