Перейти к главному содержимому

Настройка nginx для вызова скриптов через CGI

nginx будет работать через FastCGI c сервером fcgiwrap, который и будет запускать скрипты через CGI.

Установка и настройка

Дальнейшие действия следует производить от имени root.

Установить серверы:

apt install nginx-full fcgiwrap

Создать файл конфигурации /etc/nginx/fcgiwrap.conf для nginx:

location /cgi-bin/ {
    gzip off;
    root  /var/www;
    fastcgi_pass  unix:/var/run/fcgiwrap.socket;
    include /etc/nginx/fastcgi_params;
    fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
}

Создать каталог для cgi-скриптов:

mkdir /var/www/cgi-bin
chmod 755 /var/www/cgi-bin

Добавить в файл конфигурации /etc/nginx/sites-available/default строку include fcgiwrap.conf;

server {
        .....
        .....
        include fcgiwrap.conf;
}

Включить fcgiwrap и перезапустить nginx:

systemctl enable fcgiwrap
systemctl restart nginx

Проверка

Создать тестовый файл /var/www/cgi-bin/index.cgi:

#!/usr/bin/env python3

print("Content-type: text/html\n")
print("<html>\n<body>")
print("<div style=\"width: 100%; font-size: 40px; font-weight: bold; text-align: center;\">")
print("CGI Script Test Page")
print("</div>")
print("</body>\n</html>")

Сделать файл исполняемым

chmod 705 /var/www/cgi-bin/index.cgi

Проверить можно по ссылке вида http://servername/cgi-bin/index.cgi.

Скрипт не обязательно должен быть на python, можно использовать bash.

#!/bin/bash

printf "Content-type: text/html\r\n"
printf "\r\n"
printf "<html>\n<body>"
echo "<div style=\"width: 100%; font-size: 40px; font-weight: bold; text-align: center;\">"
printf "CGI Script Test Page"
printf "</div>\n"

echo `whoami`

printf "</body>\n</html>\r\n"

Источник: https://www.server-world.info/en/note?os=Debian_11&p=nginx&f=8