Nginx是一个高性能web服务器,但是由于它不能直接调用cgi程序,所以需要cgi管理进程的帮助,使用反向代理,将客户端的请求转发给固定的ip与端口,通过cgi管理进程监听端口后,就可以实现使用Nginx服务器来处理cgi程序。
现在的网页后台交互cgi大多采用PHP语言编写,配合php-fpm来使用。但是如果想用C/C++完成一个cgi呢?作为编程语言的元老,C/C++自然是可以完成这项任务的,但需要的不是php-fpm,而是使用spawn-fcgi来实现。
spawn-fcgi是实现cgi的主要程序,由于Nginx不能处理动态请求,于是将动态请求转发给spawn-fcgi处理。
但是spawn-fcgi处理的是fast-cgi,这跟cgi有啥区别呢?他们是一个东西么?
cgi
首先了解cgi是何物,他的官方名称是公共网关接口(Common Gateway Interface,CGI)。按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。
说人话就是可以配合前端的请求来实现与服务器的交互比如:数据库操作等。
每一次请求调用cgi时,都打开一个cgi进程,这样会浪费大量的创建、回收资源的时间与资源。访问少也就算了,一旦遇到一定规模的请求时,服务器简直想直接宕机,给它个痛快。
fast-cgi
由于每次请求cgi时都要创建进程,我直接给你开个进程或一堆进程,等你请求我就处理不就可以了?所以fast-cgi诞生了。他可以有效减少由于进程直接创建与销毁之间的资源浪费问题。
安装Nginx
使用ubuntu通过apt 默认安装
sudo apt install nginx -y
安装spawn-fcgi
使用ubuntu通过apt 默认安装
sudo apt install spawn-fcgi
fcgi开发环境
使用fcgi-2.4.1来开发,需要自行下载
解压之后,三板斧!
./configure
如果make出错需要在/include/fcgio.h文件中加一句#include
make
sudo make install
下面这几句分别执行。
如果/usr/目录下没有lib64,只有lib32,就将lib64改为lib32
sudo ln -s /usr/local/lib/libfcgi.so.0 /usr/lib/libfcgi.so.0
sudo ln -s /usr/local/lib/libfcgi.so.0 /usr/lib64/libfcgi.so.0
sudo ln -s /usr/local/lib/libglog.so.0 /usr/lib/libglog.so.0
sudo ln -s /usr/local/lib/libglog.so.0 /usr/lib64/libglog.so.0
配置Nginx
如果你使用默认配置,打开/etc/nginx/nginx.conf 在http{ }里添加如下代码
IP地址改成ubuntu的IP
server {
listen 80;
# 访问的域名或IP地址
server_name 192.168.2.136;
location /test{
#配置fastcgi模块
fastcgi_pass 127.0.0.1:9001;
include fastcgi.conf;
}
}
编写fast-cgi程序
#include "fcgi_stdio.h"
#include <stdlib.h>
int main(){
while(FCGI_Accept() >= 0){
printf("Content-type: text/html\r\n"
"\r\n"
""
"FastCGI Hello!");
}
return 0;
}
编译
gcc test.c -o test.cgi -lfcgi
配置spawn-fcgi
sudo spawn-fcgi -a 127.0.0.1 -p 9001 -f ./test.cgi
成功返回进程pid
打开Nginx
启动并使用配置文件(默认位置)
sudo nginx -c /etc/nginx/nginx.conf
试试
在浏览器打开
http://192.168.2.136/test
来源:CSDN
作者:不霁何虹丶
链接:https://blog.csdn.net/qq_43666528/article/details/104694391