Nginx відомий високою швидкістю та невеликим споживанням ресурсів, але не має вбудованої підтримки класичних CGI-скриптів. Щоб запускати програми з розширеннями .cgi або .pl, запити потрібно передавати іншому сервісу, який виконає скрипт і поверне результат користувачеві.

У Debian Squeeze та Ubuntu 11.04 для цього можна використати кілька способів. Найпростіший варіант — встановити легкий вебсервер Thttpd і налаштувати його на локальну адресу 127.0.0.1 та окремий порт, наприклад 8000. Після цього Nginx перенаправлятиме запити з каталогу /cgi-bin до Thttpd.

У конфігурації Thttpd потрібно дозволити виконання файлів .cgi та .pl, вказати користувача www-data, каталог із CGI-скриптами та шлях до журналу. Оскільки сервіс працює лише на локальній адресі, безпосередньо з інтернету він недоступний — усі запити проходять через Nginx.

Недоліком такого рішення є спільний каталог /var/www/cgi-bin для всіх доменів. На сервері з кількома сайтами це може бути незручно, адже CGI-файли різних проєктів зберігатимуться в одному місці.

Другий спосіб передбачає використання оболонки Simple CGI. Для неї встановлюються Perl-модулі FastCGI, після чого створюється спеціальний скрипт, який запускається як фоновий процес і приймає запити через Unix-сокет.

Перевага Simple CGI полягає в тому, що кожен віртуальний хост може мати власний каталог cgi-bin. Водночас така оболонка краще підходить для простих сценаріїв, а зі складними CGI-програмами можуть виникати проблеми.

Більш універсальним рішенням є Fcgiwrap. Він також працює через FastCGI та Unix-сокет, але підтримує як прості, так і складні CGI-скрипти. Після встановлення пакета fcgiwrap Nginx підключається до сокета /var/run/fcgiwrap.socket і передає йому шлях до потрібного виконуваного файлу.

Для кожного сайту в конфігурації Nginx можна вказати власний кореневий каталог і окрему папку cgi-bin. Це зручніше для сервера з кількома доменами, оскільки скрипти різних проєктів залишаються розділеними.

Після внесення змін Nginx потрібно перезавантажити. Для перевірки можна створити простий Perl-скрипт, який повертає HTML-сторінку, надати йому права на виконання та відкрити його адресу у браузері.

Для одного сайту достатньо зв’язки Nginx і Thttpd. Якщо сервер обслуговує кілька віртуальних хостів, практичніше використовувати Fcgiwrap, оскільки він дозволяє створити окремий CGI-каталог для кожного домену.