fastCGI入门

CGI

common gateway interface,公共网关接口

CGI程序是如何工作的:

  • web服务器(nginx),收到一个请求
  • web服务器fork一个子进程(每处理一个请求,都会创建一个子进程)
  • 数据处理完成之后,该cgi进程会被web服务器杀死

CGI的弊端:

  • 需要频繁的创建和销毁进程
  • web服务器效率低

改进:

  • 使用fastCGI

注:

  • nginx下fastcgi与服务器是分离的

  • fastcgi可使用spawn-fcgi或者php-fpm来管理

fastCGI安装

https://blog.csdn.net/m0_38059875/article/details/105582920

环境配置

1、nginx配置文件修改

sudo vim /usr/local/nginx/conf/nginx.conf

注意!不是下载目录的文件:/home/lzy/Documents/diskPro/nginx-1.16.1/conf/nginx.conf

增加location用以配置fastCGI模块(联系配置反向代理模块)

  • location=/test/处理的是目录

  • location=/test.html处理的是静态页面

  • location=/test处理的是指令

  • fastcgi_pass对应的ip(三种情况)和端口:

    • 127.0.0.1

    • localhost

    • 192.168.137.200

    • 端口:

      • nginx(nginx是80端口)将要处理的数据发送到9001端口
      • 9001端口对应一个进程, 该进程可以收到nginx发送过来的数据
  • fastcgi.conf中常用环境变量:

    • QUERY_STRING: 请求的资源, 请求行的第二部分
    • REQUEST_METHOD: 请求方法, get/post
    • CONTENT_TYPE: 文件类型
    • SCRIPT_NAME: 处理的指令, nginx中配置cgi的时候用
    • REQUEST_URI: 浏览器中请求的资源, 不包括IP+port

2、编写一个fastCGI程序

此处选用自带的一个例子:

  • /home/lzy/Documents/diskPro/fcgi-2.4.1-SNAP-0910052249/examples/echo.c

将其拷贝至目录~下进行编译:

  • cp echo.c ~
  • gcc echo.c -lfcgi(注意链接动态库,生成./a.out程序)

如果执行./a.out报错:

./a.out: error while loading shared libraries: libfcgi.so.0: cannot open shared object file: No such file or directory

  • ldd a.out查看是否缺库,发现libfcgi.so.0 => not found
  • 使用find /usr/lib -name "libfcgi.so"查找,或者find /usr/local/lib -name "libfcgi.so"可以找到
  • sudo vim /etc/ld.so.conf加上一行/usr/local/lib
  • sudo ldconfig,此时则可以运行成功

3、spawn-fcgi

  • 编写一个fcgi程序(见2)

  • spawn-fcgi -a IP -p 端口 -f fastcgi程序

    • -a - IP: 服务器IP地址(见1中的ip,需要对应)
    • -p - port: 服务器将数据发送到的端口,spawn-fcgi从该端口读数据
    • -f - cgi程序: spawn-fcgi启动的可执行fastcgi程序
  • spawn-fcgi -a 127.0.0.1 -p 9001 -f ./a.out

4、通过html(表单)访问

  • 打开html文件(form表单发起了test指令)
  • nginx收到test指令,定位到fastCGI去处理(自己编写的fastCGI程序),spawn-fcgi位于期间缓冲
<form method="post" action="http://192.168.137.200/test">

通过部署web界面实现文件的上传操作

1、将zyFile2拷贝到nginx安装目录/usr/local/nginx

2、查看上传文件对应的html,找到数据提交的位置(nginx需要配置的指令/upload)

3、修改nginx配置文件(添加location:一个指令、一个静态页面)

4、重新加载nginx配置文件

  • sudo nginx -s reload

5、启动spawn-fcgi

cd ~

spawn-fcgi -a 127.0.0.1 -p 8002 -f ./a.out

5、编写一个fastCGI程序

  • 将上传的文件提交到fastDFS存储结点
    • 将上传文件内容保存到web服务器
    • 调用fastdfs api将文件上传到fastdfs存储结点上
    • 得到一文件ID
    • 将文件名和对应的fastdfs返回的文件id存储到mysql数据库
    • 将上传之后的文件从web服务器删除
posted @   代码生财  阅读(530)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示