Nginx, CGI · 2 min read · Jan 23, 2026
Обслуживание CGI-скриптов с Nginx на Fedora 18 - Страница 2
3 Использование Fcgiwrap
Fcgiwrap — это обертка для CGI, которую можно использовать в средах совместного хостинга, так как она позволяет каждому виртуальному хосту использовать свою собственную директорию cgi-bin.
Поскольку для Fedora нет пакета fcgiwrap, мы должны собрать его самостоятельно. Сначала установим некоторые предварительные зависимости:
yum groupinstall 'Development Tools'yum install fcgi-develТеперь мы можем собрать fcgiwrap следующим образом:
cd /usr/local/src/
git clone git://github.com/gnosek/fcgiwrap.git
cd fcgiwrap
autoreconf -i
./configure
make
make installЭто установит fcgiwrap в /usr/local/sbin/fcgiwrap.
Далее мы установим пакет spawn-fcgi, который позволяет нам запускать fcgiwrap как демон:
yum install spawn-fcgiОткройте /etc/sysconfig/spawn-fcgi…
vi /etc/sysconfig/spawn-fcgi… и измените файл следующим образом:
| # Вы должны установить некоторые рабочие параметры, прежде чем служба "spawn-fcgi" будет работать. # Если SOCKET указывает на файл, то этот файл очищается скриптом инициализации. # # См. spawn-fcgi(1) для всех возможных параметров. # # Пример : #SOCKET=/var/run/php-fcgi.sock #OPTIONS="-u apache -g apache -s $SOCKET -S -M 0600 -C 32 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi" FCGI_SOCKET=/var/run/fcgiwrap.socket FCGI_PROGRAM=/usr/local/sbin/fcgiwrap FCGI_USER=nginx FCGI_GROUP=nginx FCGI_EXTRA_OPTIONS="-M 0700" OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM" |
Создайте ссылки для автозагрузки системы для spawn-fcgi…
systemctl enable spawn-fcgi.service… и запустите его следующим образом:
systemctl start spawn-fcgi.serviceТеперь вы должны найти сокет fcgiwrap в /var/run/fcgiwrap.socket, принадлежащий пользователю и группе nginx.
Теперь откройте файл конфигурации вашего виртуального хоста…
vi /etc/nginx/conf.d/www.example.com.vhost… и добавьте секцию location /cgi-bin {} в контейнер server {}:
| server { [...] location /cgi-bin/ { # Отключите gzip (это делает скрипты медленнее, так как они должны завершиться # перед тем, как будут сжаты) gzip off; # Установите корень в /usr/lib (внутри этого местоположения это означает, что мы # предоставляем доступ к файлам под /usr/lib/cgi-bin) root /var/www/www.example.com; # Сокет Fastcgi fastcgi_pass unix:/var/run/fcgiwrap.socket; # Параметры Fastcgi, включите стандартные include /etc/nginx/fastcgi_params; # Настройте нестандартные параметры (SCRIPT_FILENAME) fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } [...] } |
Перезагрузите nginx:
systemctl reload nginx.serviceДалее мы создаем нашу директорию cgi-bin - /var/www/www.example.com/cgi-bin, потому что мы определили root /var/www/www.example.com; в контейнере location /cgi-bin {}:
mkdir /var/www/www.example.com/cgi-binТеперь мы помещаем наши CGI-скрипты в нее и делаем их исполняемыми. Для тестирования я создам небольшой скрипт Hello World на Perl (вместо hello_world.cgi вы также можете использовать расширение .pl -> hello_world.pl):
vi /var/www/www.example.com/cgi-bin/hello_world.cgi| #!/usr/bin/perl -w # Скажите perl отправить html заголовок. # Так ваш браузер получает вывод # а не |Hello world
\n";
chmod 755 /var/www/www.example.com/cgi-bin/hello_world.cgiОткройте браузер и протестируйте скрипт:
http://www.example.com/cgi-bin/hello_world.cgiЕсли все пройдет хорошо, вы должны получить следующий вывод:

4 Ссылки
- Nginx: http://nginx.org/
- Nginx Wiki: http://wiki.nginx.org/
- Thttpd: http://acme.com/software/thttpd/
- nginx ThttpdCGI: http://wiki.nginx.org/ThttpdCGI
- nginx Fcgiwrap: http://wiki.nginx.org/Fcgiwrap
Об авторе
Фалко Тимме является владельцем Timme Hosting (ультрабыстрая веб-хостинг на nginx). Он является ведущим куратором HowtoForge (с 2005 года) и одним из основных разработчиков ISPConfig (с 2000 года). Он также внес вклад в книгу O’Reilly “Администрирование систем Linux”.
Get new posts in your inbox
No spam. Unsubscribe anytime.