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服务器删除
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现