CGI#

该模块添加了对 CGI 的支持。

需要注意的是,CGI 不适合

  • 高 QPS;

  • 大流量;

  • 高并发。

加载模块#

main{} 的上下文中加载模块:

load_module modules/ngx_http_cgi_module.so;

配置示例#

server {
    listen 80;

    root /usr/share/angie/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    location /cgi {
        alias /usr/share/angie/cgi-bin;
        cgi on;
    }
}

测试脚本#

一个示例测试可执行脚本 test.sh

#!/bin/sh
echo "Content-Type: text/plain" # 添加响应头
echo "" # 响应头和主体之间的分隔符

# 环境变量
echo "query string: $QUERY_STRING"
echo "server addr: $SERVER_ADDR"
echo "server port: $SERVER_PORT"

# 通过环境变量获取请求头
echo "http host: $HTTP_HOST"
echo "http accept: $HTTP_ACCEPT"
echo "http Some-Field: $HTTP_SOME_FIELD"

body=$(cat) # 将请求主体读取到变量中
echo "Request body: $body"

放置脚本#

根据配置,脚本必须放置在目录 /usr/share/angie/cgi-bin/ 中。 该文件必须具有读取和执行权限。

请求执行示例#

$ curl  -H 'Some-Field:some text' -d '{"key1":"value1", "key2":"value2"}' -i \
  'http://127.0.0.1/cgi/hello.sh?a=valueA&b=valueB'

HTTP/1.1 200 OK
Server: Angie/1.8.3
Date: Tue, 04 Mar 2025 09:15:35 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Content-Type: text/plain

query string: a=valueA&b=valueB
server addr: 127.0.0.1
server port: 80
http host: 127.0.0.1
http accept: */*
http Some-Field: some text
Request body: {"key1":"value1", "key2":"value2"}

附加信息#

详细文档和源代码可在以下网址找到: pjincz/nginx-cgi