Hoe CGI-scripts uitvoeren op Nginx?

Gepubliceerd 20 januari 2026

Probleem: CGI-Scripts Uitvoeren op Nginx

Het uitvoeren van CGI-scripts op Nginx kan lastig zijn vanwege het ontwerp van Nginx, dat verschilt van andere webservers. Nginx ondersteunt CGI niet standaard, dus je moet extra configuratie en modules instellen om CGI-scripts correct te laten draaien.

De Oplossing: FastCGI Gebruiken met Nginx

FastCGI Instellen voor Perl-Scripts

Om CGI-scripts op Nginx te draaien, moet je FastCGI gebruiken. Deze methode is efficiënter dan traditionele CGI en werkt goed samen met de architectuur van Nginx. Zo stel je het in:

  1. Installeer pakketten: Installeer de benodigde software. Op CentOS gebruik je dit commando:

    sudo yum install nginx fcgi-perl spawn-fcgi
  2. Configureer Nginx voor FastCGI: Bewerk je Nginx-configuratiebestand (meestal te vinden op /etc/nginx/nginx.conf) om FastCGI-ondersteuning toe te voegen. Voeg deze regels toe binnen het server-blok:

    location ~ \.pl$ {
       fastcgi_pass unix:/var/run/fcgiwrap.socket;
       include fastcgi_params;
    }
  3. Maak een wrapper-script voor je Perl CGI: Maak een wrapper-script om je Perl CGI-script uit te voeren. Sla dit op als /usr/local/bin/perl-cgi-wrapper:

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

    Stel de juiste rechten in:

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

Door deze stappen te volgen, heb je de basisopstelling om Perl CGI-scripts op Nginx uit te voeren met FastCGI. Deze aanpak stelt Nginx in staat om CGI-verzoeken efficiënt af te handelen terwijl het zijn prestatieverbeteringen behoudt.

Tip: Optimaliseer FastCGI-Prestaties

Om de FastCGI-prestaties te verbeteren, pas je het aantal FastCGI-processen aan op basis van je serverbronnen en verkeer. Voeg de volgende regel toe aan je Nginx-configuratie:

fastcgi_keep_conn on;

Dit houdt de verbinding tussen Nginx en FastCGI open, wat de overhead voor meerdere verzoeken vermindert.

Nginx Configureren voor FastCGI

Het Nginx-Configuratiebestand Aanpassen

Om Nginx in te stellen voor FastCGI, moet je het Nginx-configuratiebestand aanpassen. Dit bestand bevindt zich vaak op /etc/nginx/nginx.conf. Zo doe je dat:

  1. Voeg een location-blok toe voor CGI-scripts: Open het Nginx-configuratiebestand en voeg dit blok toe in het server-gedeelte:

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

    Dit blok vertelt Nginx om alle bestanden die eindigen op .cgi te verwerken met FastCGI.

  2. Stel FastCGI-parameters in: Voeg in hetzelfde bestand het fastcgi_params-gedeelte toe of pas het aan:

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

    Deze parameters geven de benodigde informatie door aan het FastCGI-proces.

  3. Configureer de FastCGI-socket: Voeg deze regel toe aan het http-gedeelte van je Nginx-configuratie:

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

    Dit definieert de socket die Nginx zal gebruiken om te communiceren met het FastCGI-proces.

Na het maken van deze wijzigingen, sla je het bestand op en herstart je Nginx om de nieuwe instellingen toe te passen:

sudo systemctl restart nginx

Met deze wijzigingen is Nginx nu ingesteld om te werken met FastCGI voor het verwerken van CGI-scripts.

Tip: Controleer FastCGI-Configuratie

Na het configureren van Nginx voor FastCGI is het verstandig om te controleren of de configuratie correct is. Je kunt het volgende commando gebruiken om de Nginx-configuratie te testen op syntaxfouten:

sudo nginx -t

Als de configuratie correct is, zie je een bericht met "nginx: configuration file /etc/nginx/nginx.conf test is successful". Als er fouten zijn, wijst het commando op de specifieke problemen in je configuratiebestand.

Het FastCGI-Proces Uitvoeren

Het FastCGI-Proces Handmatig Starten

Om het FastCGI-proces handmatig te starten, gebruik je het spawn-fcgi-commando:

  1. Voer dit commando uit:
sudo spawn-fcgi -u nginx -g nginx -s /var/run/fcgiwrap.socket -P /var/run/fcgiwrap.pid -F 1 -- /usr/sbin/fcgiwrap

Dit commando start het FastCGI-proces met de nginx-gebruiker en -groep, maakt een socket-bestand aan en stelt het pad naar de fcgiwrap-binary in.

  1. Controleer of het proces draait:
ps aux | grep fcgiwrap

Je zou het fcgiwrap-proces in de uitvoer moeten zien.

Het FastCGI-Proces Automatiseren

Om het FastCGI-proces automatisch te starten wanneer je systeem opstart, maak je een service-bestand aan en schakel je het in.

  1. Maak een service-bestand aan:

Maak een nieuw bestand genaamd fcgiwrap.service in de map /etc/systemd/system/:

sudo nano /etc/systemd/system/fcgiwrap.service
  1. Voeg deze inhoud toe aan het bestand:
[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. Sla het bestand op en sluit de editor.

  2. Herlaad de systemd-daemon om de nieuwe service te herkennen:

sudo systemctl daemon-reload
  1. Schakel de service in om bij het opstarten te starten:
sudo systemctl enable fcgiwrap
  1. Start de service:
sudo systemctl start fcgiwrap

Nu zal het FastCGI-proces automatisch starten wanneer je systeem opstart, en je kunt het beheren met systemctl-commando's zoals start, stop en restart.

Tip: Monitor FastCGI-Proces

Om de status van het FastCGI-proces te volgen, gebruik je het systemctl status-commando:

sudo systemctl status fcgiwrap

Dit toont of het proces actief is, wanneer het is gestart en recente logberichten. Het is een goede manier om te controleren of het proces correct draait of dat er problemen zijn.

Je CGI-Opstelling Testen

Om te controleren of je CGI-opstelling werkt, kun je een voorbeeld-CGI-script maken en openen in een webbrowser. Zo doe je dat:

  1. Maak een voorbeeld-CGI-script:

Maak een nieuw bestand genaamd test.cgi in de CGI-map van je webserver (vaak /usr/share/nginx/html/cgi-bin/):

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

Voeg deze inhoud toe aan het bestand:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>";
print "<h1>CGI Testscript</h1>";
print "<p>Als je dit kunt zien, werkt je CGI-opstelling!</p>";
print "</body></html>";

Sla het bestand op en sluit de editor.

  1. Stel de juiste rechten in:

Maak het script uitvoerbaar:

sudo chmod +x /usr/share/nginx/html/cgi-bin/test.cgi
  1. Open het script in een webbrowser:

Gebruik een webbrowser en voer de URL van je server in gevolgd door het pad naar het CGI-script. Bijvoorbeeld:

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

Als het correct is ingesteld, zou je een webpagina moeten zien met de boodschap "Als je dit kunt zien, werkt je CGI-opstelling!"

Als je problemen hebt:

  • Controleer het Nginx-foutlogboek op foutmeldingen:

    sudo tail -f /var/log/nginx/error.log
  • Zorg ervoor dat het FastCGI-proces draait:

    sudo systemctl status fcgiwrap
  • Controleer de bestandsrechten en eigendom van het CGI-script.

Door dit testscript uit te voeren, kun je bevestigen dat je Nginx-server is ingesteld om CGI-scripts af te handelen met FastCGI.

Tip: CGI-Scripts Debuggen

Als je CGI-script niet werkt zoals verwacht, kun je debug-informatie toevoegen om het probleem te identificeren. Pas je test.cgi-script aan om omgevingsvariabelen op te nemen:

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body>";
print "<h1>CGI Testscript</h1>";
print "<p>Als je dit kunt zien, werkt je CGI-opstelling!</p>";
print "<h2>Omgevingsvariabelen:</h2>";
print "<ul>";
foreach $key (sort keys %ENV) {
    print "<li><strong>$key:</strong> $ENV{$key}</li>";
}
print "</ul>";
print "</body></html>";

Dit script toont alle omgevingsvariabelen, wat je kan helpen begrijpen hoe je CGI-script wordt uitgevoerd en welke informatie beschikbaar is.