Como Executar Scripts CGI no Nginx?

Publicado 20 de janeiro de 2026

Problema: Executando Scripts CGI no Nginx

Executar scripts CGI no Nginx pode ser difícil por causa da arquitetura do Nginx, que é diferente de outros servidores web. O Nginx não suporta CGI por padrão, então você precisa fazer configurações extras e adicionar módulos para executar scripts CGI corretamente.

A Solução: Usando FastCGI com Nginx

Configurando FastCGI para Scripts Perl

Para executar scripts CGI no Nginx, você precisa usar FastCGI. Este método é mais eficiente que o CGI tradicional e funciona bem com a arquitetura do Nginx. Veja como configurar:

  1. Instale os pacotes: Instale o software necessário. No CentOS, use este comando:

    sudo yum install nginx fcgi-perl spawn-fcgi
  2. Configure o Nginx para FastCGI: Edite seu arquivo de configuração do Nginx (normalmente em /etc/nginx/nginx.conf) para incluir suporte a FastCGI. Adicione estas linhas dentro do bloco server:

    location ~ \.pl$ {
       fastcgi_pass unix:/var/run/fcgiwrap.socket;
       include fastcgi_params;
    }
  3. Crie um script wrapper para seu CGI Perl: Faça um script wrapper para executar seu script CGI Perl. Salve como /usr/local/bin/perl-cgi-wrapper:

    #!/bin/sh
    exec /usr/bin/perl $1

    Defina as permissões corretas:

    sudo chmod +x /usr/local/bin/perl-cgi-wrapper

Seguindo estes passos, você terá a configuração básica para executar scripts CGI Perl no Nginx usando FastCGI. Esta abordagem permite que o Nginx processe requisições CGI de forma eficiente mantendo seus benefícios de performance.

Dica: Otimize a Performance do FastCGI

Para melhorar a performance do FastCGI, ajuste o número de processos FastCGI com base nos recursos do seu servidor e tráfego. Adicione a seguinte linha à sua configuração do Nginx:

fastcgi_keep_conn on;

Isso mantém a conexão entre o Nginx e o FastCGI aberta, reduzindo a sobrecarga para múltiplas requisições.

Configurando o Nginx para FastCGI

Modificando o Arquivo de Configuração do Nginx

Para configurar o Nginx para FastCGI, você precisa alterar o arquivo de configuração do Nginx. Este arquivo geralmente fica em /etc/nginx/nginx.conf. Veja como fazer:

  1. Adicione um bloco location para scripts CGI: Abra o arquivo de configuração do Nginx e adicione este bloco na seção server:

    location ~ \.cgi$ {
       fastcgi_pass unix:/var/run/fcgiwrap.socket;
       fastcgi_index index.cgi;
       include fastcgi_params;
    }

    Este bloco indica ao Nginx para processar todos os arquivos terminados em .cgi usando FastCGI.

  2. Configure os parâmetros FastCGI: No mesmo arquivo, adicione ou altere a seção fastcgi_params:

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param QUERY_STRING    $query_string;

    Estes parâmetros passam as informações necessárias ao processo FastCGI.

  3. Configure o socket FastCGI: Adicione esta linha à seção http da sua configuração do Nginx:

    upstream fcgiwrap {
       server unix:/var/run/fcgiwrap.socket;
    }

    Isso define o socket que o Nginx usará para se comunicar com o processo FastCGI.

Depois de fazer estas alterações, salve o arquivo e reinicie o Nginx para aplicar as novas configurações:

sudo systemctl restart nginx

Com estas alterações, o Nginx está agora configurado para funcionar com FastCGI para processar scripts CGI.

Dica: Verifique a Configuração do FastCGI

Depois de configurar o Nginx para FastCGI, é uma boa ideia verificar se a configuração está correta. Você pode usar o seguinte comando para testar a configuração do Nginx em busca de erros de sintaxe:

sudo nginx -t

Se a configuração estiver correta, você verá uma mensagem dizendo "nginx: configuration file /etc/nginx/nginx.conf test is successful". Se houver erros, o comando indicará os problemas específicos no seu arquivo de configuração.

Executando o Processo FastCGI

Iniciando o Processo FastCGI Manualmente

Para iniciar o processo FastCGI manualmente, use o comando spawn-fcgi:

  1. Execute este comando:
sudo spawn-fcgi -u nginx -g nginx -s /var/run/fcgiwrap.socket -P /var/run/fcgiwrap.pid -F 1 -- /usr/sbin/fcgiwrap

Este comando inicia o processo FastCGI com o usuário e grupo nginx, cria um arquivo de socket e define o caminho para o binário fcgiwrap.

  1. Verifique se o processo está em execução:
ps aux | grep fcgiwrap

Você deve ver o processo fcgiwrap na saída.

Automatizando o Processo FastCGI

Para iniciar o processo FastCGI automaticamente quando seu sistema inicializar, crie um arquivo de serviço e ative-o.

  1. Crie um arquivo de serviço:

Crie um novo arquivo chamado fcgiwrap.service no diretório /etc/systemd/system/:

sudo nano /etc/systemd/system/fcgiwrap.service
  1. Adicione este conteúdo ao arquivo:
[Unit]
Description=FastCGI wrapper
After=syslog.target network.target

[Service]
Type=forking
PIDFile=/var/run/fcgiwrap.pid
ExecStart=/usr/bin/spawn-fcgi -u nginx -g nginx -s /var/run/fcgiwrap.socket -P /var/run/fcgiwrap.pid -F 1 -- /usr/sbin/fcgiwrap
ExecStop=/bin/kill -QUIT $MAINPID

[Install]
WantedBy=multi-user.target
  1. Salve o arquivo e saia do editor.

  2. Recarregue o daemon systemd para reconhecer o novo serviço:

sudo systemctl daemon-reload
  1. Ative o serviço para iniciar na inicialização:
sudo systemctl enable fcgiwrap
  1. Inicie o serviço:
sudo systemctl start fcgiwrap

Agora, o processo FastCGI iniciará automaticamente quando seu sistema for ligado, e você pode gerenciá-lo usando comandos systemctl como start, stop e restart.

Dica: Monitore o Processo FastCGI

Para acompanhar o status do processo FastCGI, use o comando systemctl status:

sudo systemctl status fcgiwrap

Isso mostrará se o processo está ativo, quando foi iniciado e mensagens de log recentes. É uma boa forma de verificar se o processo está funcionando corretamente ou se há problemas.

Testando Sua Configuração CGI

Para verificar se sua configuração CGI funciona, você pode criar um script CGI de exemplo e abrí-lo em um navegador web. Veja como:

  1. Crie um script CGI de exemplo:

Crie um novo arquivo chamado test.cgi no diretório CGI do seu servidor web (geralmente /usr/share/nginx/html/cgi-bin/):

sudo nano /usr/share/nginx/html/cgi-bin/test.cgi

Adicione este conteúdo ao arquivo:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>";
print "<h1>Script de Teste CGI</h1>";
print "<p>Se você consegue ver isso, sua configuração CGI está funcionando!</p>";
print "</body></html>";

Salve o arquivo e saia do editor.

  1. Defina as permissões corretas:

Torne o script executável:

sudo chmod +x /usr/share/nginx/html/cgi-bin/test.cgi
  1. Abra o script em um navegador web:

Use um navegador web e digite a URL do seu servidor seguida do caminho para o script CGI. Por exemplo:

http://ip_do_seu_servidor/cgi-bin/test.cgi

Se estiver configurado corretamente, você deve ver uma página web com a mensagem "Se você consegue ver isso, sua configuração CGI está funcionando!"

Se tiver problemas:

  • Verifique o log de erros do Nginx em busca de mensagens de erro:

    sudo tail -f /var/log/nginx/error.log
  • Certifique-se de que o processo FastCGI está em execução:

    sudo systemctl status fcgiwrap
  • Verifique as permissões e propriedade do arquivo do script CGI.

Ao executar este script de teste, você pode confirmar que seu servidor Nginx está configurado para processar scripts CGI usando FastCGI.

Dica: Depurando Scripts CGI

Se seu script CGI não estiver funcionando como esperado, você pode adicionar informações de depuração para ajudar a identificar o problema. Modifique seu script test.cgi para incluir variáveis de ambiente:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>";
print "<h1>Script de Teste CGI</h1>";
print "<p>Se você consegue ver isso, sua configuração CGI está funcionando!</p>";
print "<h2>Variáveis de Ambiente:</h2>";
print "<ul>";
foreach $key (sort keys %ENV) {
    print "<li><strong>$key:</strong> $ENV{$key}</li>";
}
print "</ul>";
print "</body></html>";

Este script exibirá todas as variáveis de ambiente, o que pode ajudá-lo a entender como seu script CGI está sendo executado e quais informações estão disponíveis para ele.