fcgiwrap

Table of Contents

1. fcgiwrap简介

FastCGI(快速通用网关接口)是语言无关的协议。

FastCGI 的工作模式和 Nginx 类似,分为 Master 进程和 Worker 进程。Master 进程主要用来监控 Worker 进程的运行;Worker 进程则是真正干活的进程,用来执行 CGI 程序,获取 CGI 程序的标准输出,再将其返回给支持 FastCGI 的 Web 服务器(如 Nginx 等)。

fcgiwrap 是个通用的 FastCGI 进程管理器。

1.1. 安装和启动fcgiwrap

安装 fcgiwrap:

$ sudo yum install fcgiwrap

启动 4 个 fcgiwrap worker 进程(也可以使用工具 spawn-fcgi 来启动 fcgiwrap,这里不介绍):

$ nohup sudo fcgiwrap -f -c 4 -s unix:/run/fcgiwrap.socket 2>&1 &
$ sudo chown nginx:nginx /run/fcgiwrap.socket  ## 修改监听套接字文件的 owner

2. nginx配置

Nginx 支持 FastCGI,本文介绍如何配置使得 Nginx 执行 Shell 程序。

假设 fcgiwrap 已经按上节介绍的步骤启动,并且监听在套接字文件 /run/fcgiwrap.socket 上。准备下面 Nginx 配置文件:

server {
    listen      80;
    server_name 192.168.1.100;
    root        /home/www/public;
    index       index.html;

    location ~* \.cgi$ {
        fastcgi_pass    unix:/run/fcgiwrap.socket;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include         fastcgi_params;
    }
}

准备下面cgi程序(/home/www/public/1.cgi):

#!/bin/bash
printf "Content-Type: text/plain; charset=utf-8\r\n"
printf "\r\n"

printf "hello, world!\n"
echo 'QUERY_STRING:' $QUERY_STRING

为上面文件增加可执行权限后。通过下面命令可以对其进行测试:

$ curl 192.168.1.100/1.cgi?k1=v1
hello, world!
QUERY_STRING: k1=v1

Author: cig01

Created: <2018-11-17 Sat>

Last updated: <2019-05-07 Tue>

Creator: Emacs 27.1 (Org mode 9.4)