百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

使用C++实现FastCGI与nginx协同工作

off999 2025-02-03 14:33 28 浏览 0 评论

相比于CGI,FastCGI使用持久的进程保持与Web服务器的通讯,可以获得更高的性能。目前主流的Web服务器都支持FastCGI。FastCGI定义了一个简单的协议,将CGI的内容包容进去,使得理解CGI之后,编写FastCGI就简单了。



本文实例架构与效果展示

本实例使用C/C++语言,不使用任何第三方库,完全基于socket编写一个tcp服务程序,用来演示与nginx的通讯(接受连接、处理请求、发送响应、结束会话)。详细如下:

  • FastCGI:使用gcc编译,运行在VirtualBox的Ubuntu虚拟机
  • nginx:使用的是运行在windows下的nginx-1.19.2
  • 浏览器:使用的Chrome
  • url :使用的gitbash附带的,版本是curl 8.9.1
  • tcpdump :基于ubuntu下自带抓包命令行工具

本实例完成之后的效果如下:




FastCGI与Web服务器的通讯协议

这在里,FastCGI作为服务端,Nginx作为客户端。



当Nginx收到浏览器请求后,识别出应该访问FastCGI,Nginx会创建(或使用已经存在的)与FastCGI的TCP链接,发送包含BEGIN(会话开始)、PARAM(会话参数,含HTTP头、GET方法参数等)、STDIN(通常是HTTP的POST方法数据内容)内容的请求报文。FastCGI要确保完整接受所有请求数据,然后再处理给出响应,响应内容包括STDOU(输出部分HTTP头信息与HTTP消息体内容),END(告知会话结束)。回应中使用的报文需要要与请求给出的报文序号一致。每个报文格式为头+体。头都是8个字节,并要求体也按8字节对齐,内部不够时要对齐,在末尾填充0。头如下,体直接按5、6字节的short类型长度跟着。

1

2

3

4

5

6

7

8

版本

指令

编号

长度

对齐

保留

常用指令有这些:

1

BEGIN

4

PARAM

5

STDIN

6

STDOUT

7

END

Nginx如何配置FastCGI

nginx内置了FastCGI的支持,直接使用如下配置,就可以将匹配的url请求路由到对应的fastcgi服务去。

location /fcgi/{
  fastcgi_pass 192.168.99.106:9000; 
  include fastcgi_params;
}

C/C++基于socket写一个FastCGi

详细代码参考gitee。这里列出重要部分。

  • 确保报文要收完
  • 确保内容不够8字节要对齐
  • 确保发送END指令




报文跟踪

FastCGI的资料并不完整,本文通过查看相关库文件搜索而来,中间有遇到一些问题,导致通讯不顺畅。主要办法是通过tcpdump对比报文而来的。这里的示例代码也给了很多日志,对比可看到问题。例如:


  1. 收完BEGIN,还需要接受一个包体,否则无法
  2. 收完PARAM,未收STDIN,直接回复,nginx的反应不稳定




参考资料

  1. CGI https://tools.ietf.org/html/rfc3875
  2. Gitee https://gitee.com/wapuboy/learning-programming-with-gauss/blob/master/code/c++/src/fastcgi.cpp

相关推荐

电脑黑屏出现一堆字母(电脑屏幕黑屏突然又出现很多字母怎么办)

先尝试修复,不行就重装系统:第一、有可能是系统有问题了,可能的解决办法:1、开机不断点击F8键,进入系统操作选单,选“最后一次正确配置”,重启电脑,看能否解决。2、开机不断点击F8键,进入系统操作选单...

怎么清理系统数据(怎么清理系统数据安卓)

要清理系统占用的内存,可以尝试以下方法:1.关闭不必要的程序:打开任务管理器(在Windows中按Ctrl+Shift+Esc),查看运行中的程序和进程,关闭不必要的应用程序和任务,以释放内...

手机自动更新在哪里关闭(oppo软件自动更新怎么关闭)

1、首先要保证你的手机已经代开“开发者模式”,这样才能关闭或者打开系统自动更新;2、找到手机上的“设置”并点击;3、在设置页面找到“开发者选项”并点击;4、在开发者选项找到“系统自动更新”,因为系统默...

ae(aed是什么意思)

跨境电商里说的AE平台指的是AliExpress,也就是我们常说的四大平台之一的速卖通。速卖通是阿里巴巴旗下针对跨境出口,面向全球市场打造的跨境电商交易平台,被称为“国际版淘宝”,是全球第三大英文在线...

装系统进入bios(装系统进入不了PE界面)

在进入BIOS界面后,有两种方式可以重装系统,具体步骤如下:方式一:通过U盘重装系统将U盘插入电脑,重启电脑,在开机时按下F11、F12、ESC等热键,并选择USB启动项。进入安装界面后,选择“语言和...

怎么制作优盘安装系统(怎样制作优盘安装win10系统)

1.下载一键重装系统软件,打开后选择启动U盘界面,接着制作一个u盘启动盘来装系统。2.开机并不断按下U盘启动快捷键。3.U盘启动快捷键在U盘制作完成后软件界面中有提示。4.在进入系统启动菜单中选择带有...

镜像版和原版有啥区别(镜像版系统和原版)

镜像和原版不一个概念。镜像是指的一种文件格式。如ISO文件等。原版是指一个版本没有经过任何修改的系统。原版可以是形容一个镜像文件,如原版镜像。也可以形容一个系统,如原版系统。原版对应是非原版。如原...

中关村在线装机模拟器(中关村在线模拟装机平台)

有关装机模拟器自由装机最高配置取决于您的计算机配置和游戏需求。如果您想要在自由装机中的最高配置,建议您选择以下配置:CPU:AMDRyzen95900X或AM3IntelCor...

怎么截图整个网页(怎么截图整个网页快捷键)

要截取整个网页的截图,您可以尝试以下方法:使用浏览器的截图工具:大多数现代浏览器都提供了内置的截图工具,可以帮助您截取整个网页。通常,您可以通过右键点击网页上的空白处,然后选择“截图”或“捕捉整个页面...

樱桃bt磁力在线(樱桃下载 mp4 下载)

打开百度搜索引擎,在搜索框中输入“bt樱桃”就可以搜索到该网站的入口地址。在“bt樱桃”官方主页面,输入要搜索的视频的关键字,点击“搜索”按钮。在搜索结果列表中,点击相应的网站连接进入。接着就可以看到...

一招修复内存不能written(内存不能为读 修复)
  • 一招修复内存不能written(内存不能为读 修复)
  • 一招修复内存不能written(内存不能为读 修复)
  • 一招修复内存不能written(内存不能为读 修复)
  • 一招修复内存不能written(内存不能为读 修复)
cad软件下载电脑版怎么下载(cad软件电脑怎么下载安装)

1.如果没有软件的光盘,电脑能够上网,先打开网页,在网页的搜索栏输入:“CAD××下载”最好输入××版本,建议初学者选适中的版本(可选2006版)2.下载到指定路径,保存。完成后,即可安装软件(执行s...

360桌面主题安卓下载(360桌面主题安卓下载安装)

是可以改变的。360浏览器应该说是无所不能的,他下载了一个360安全卫士,你用这个安全卫士可以把你的电脑全部都修改成为360的一些应用,比如说清理软件的杀毒的都是可以的,而且还可以改变你电脑桌面的主题...

重装电脑系统会不会清空所有文件
重装电脑系统会不会清空所有文件

简单的重装系统,不会影响硬盘上C盘以外的分区和数据。重装系统,只会清除C盘的所有文件和数据,其他分区,都不会受到任何影响。只有笔记本电脑等正版系统的硬盘备份,在重置硬盘时,会删除硬盘上都全部原有数据,将硬盘恢复到出厂状态。优盘里面的东西...

2025-12-06 16:03 off999

2025买什么笔记本电脑好(2028年笔记本推荐)

1.预计会表现不错。2.因为酷睿i7是英特尔公司推出的高端处理器,具有强大的计算能力和多线程处理能力,而且2023年的新品往往会采用更先进的制程工艺和更高的主频,因此表现应该会更好。3.当然,除...

取消回复欢迎 发表评论: