Nginx · 2 min read · Jan 23, 2026

Executando Scripts CGI Com Nginx No Fedora 18 - Página 2

3 Usando Fcgiwrap

Fcgiwrap é um wrapper CGI que pode ser usado para ambientes de hospedagem compartilhada porque permite que cada vhost use seu próprio diretório cgi-bin.

Como não há pacote fcgiwrap para Fedora, devemos construí-lo nós mesmos. Primeiro, instalamos alguns pré-requisitos:

yum groupinstall 'Development Tools'
yum install fcgi-devel

Agora podemos construir o fcgiwrap da seguinte forma:

cd /usr/local/src/  
git clone git://github.com/gnosek/fcgiwrap.git  
cd fcgiwrap  
autoreconf -i  
./configure  
make  
make install

Isso instala o fcgiwrap em /usr/local/sbin/fcgiwrap.

Em seguida, instalamos o pacote spawn-fcgi que nos permite executar o fcgiwrap como um daemon:

yum install spawn-fcgi

Abra /etc/sysconfig/spawn-fcgi…

vi /etc/sysconfig/spawn-fcgi

… e modifique o arquivo da seguinte forma:

| # Você deve definir algumas opções de trabalho antes que o serviço "spawn-fcgi" funcione. # Se SOCKET aponta para um arquivo, então este arquivo é limpo pelo script de inicialização. # # Veja spawn-fcgi(1) para todas as opções possíveis. # # Exemplo : #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" |

Crie os links de inicialização do sistema para spawn-fcgi…

systemctl enable spawn-fcgi.service

… e inicie-o da seguinte forma:

systemctl start spawn-fcgi.service

Agora você deve encontrar o socket do fcgiwrap em /var/run/fcgiwrap.socket, pertencente ao usuário e grupo nginx.

Agora abra seu arquivo de configuração vhost…

vi /etc/nginx/conf.d/www.example.com.vhost

… e adicione uma seção location /cgi-bin {} ao contêiner server {}:

| server { [...] location /cgi-bin/ { # Desativar gzip (isso faz com que os scripts pareçam mais lentos, pois precisam ser concluídos # antes de serem compactados) gzip off; # Defina a raiz como /usr/lib (dentro desta localização isso significa que estamos # dando acesso aos arquivos sob /usr/lib/cgi-bin) root /var/www/www.example.com; # Socket Fastcgi fastcgi_pass unix:/var/run/fcgiwrap.socket; # Parâmetros Fastcgi, inclua os padrões include /etc/nginx/fastcgi_params; # Ajuste os parâmetros não padrão (SCRIPT_FILENAME) fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } [...] } |

Recarregue o nginx:

systemctl reload nginx.service

Em seguida, criamos nosso diretório cgi-bin - /var/www/www.example.com/cgi-bin porque definimos root /var/www/www.example.com; no contêiner location /cgi-bin {}:

mkdir /var/www/www.example.com/cgi-bin

Agora colocamos nossos scripts CGI nele e os tornamos executáveis. Para fins de teste, criarei um pequeno script Perl Hello World (em vez de hello_world.cgi, você também pode usar a extensão .pl -> hello_world.pl):

vi /var/www/www.example.com/cgi-bin/hello_world.cgi

| #!/usr/bin/perl -w # Diga ao perl para enviar um cabeçalho html. # Assim, seu navegador recebe a saída # em vez de (linha de comando # no servidor.) print "Content-type: text/html\n\n"; # imprima suas tags html básicas. # e o conteúdo delas. print "Hello World!! \n"; print "

Hello world

\n"; |

chmod 755 /var/www/www.example.com/cgi-bin/hello_world.cgi

Abra um navegador e teste o script:

http://www.example.com/cgi-bin/hello_world.cgi

Se tudo correr bem, você deve obter a seguinte saída:

4 Links

Sobre O Autor

Falko Timme é o proprietário da Timme Hosting (hospedagem web nginx ultra-rápida). Ele é o principal mantenedor do HowtoForge (desde 2005) e um dos desenvolvedores principais do ISPConfig (desde 2000). Ele também contribuiu para o livro da O’Reilly “Administração de Sistema Linux”.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.