# CGI-Skripte auf dem Apache aktivieren

[CGI](https://www.ionos.de/digitalguide/websites/web-entwicklung/was-ist-ein-cgi/)-Skripte sind eine praktische Lösung, um [Apache-Webserver](https://www.ionos.de/digitalguide/server/knowhow/was-ist-apache/) zu entlasten. Die notwendigen Apache-Konfigurationen sind schnell erledigt und die notwendigen Berechtigungen für das Verzeichnis und die CGI-Dateien unkompliziert erteilt.

## CGI-Skripte auf Apache: Anforderungen

Damit Sie das **Common Gateway Interface (CGI)** verwenden können, um Skripte an Ihren Apache-Webserver zu übermitteln, benötigen Sie folgendes Setup:

- einen Cloud Server bzw. Virtual Private Server (VPS)
- eine Linux-Server-Distribution wie CentOS 8 oder Ubuntu 22.04
- einen installierten und laufenden Apache-Webserver

Hinweis Bei einer Standard-Linux-Installation ist Apache von Anfang an installiert. Wenn Sie Ihren Server über eine Minimalinstallation erstellt haben, müssen Sie Apache aber in der Regel noch installieren und konfigurieren. Erfahren Sie in unseren weiterführenden Artikeln, wie Sie [Apache für WordPress](https://www.ionos.de/digitalguide/server/konfiguration/apache-fuer-wordpress-installieren-und-konfigurieren/) bzw. [Apache unter Ubuntu installieren](https://www.ionos.de/digitalguide/server/konfiguration/apache-unter-ubuntu-installieren/) und konfigurieren.

## CGI-Skripte in den Apache-Konfigurationen aktivieren

Zwei Dinge müssen eingerichtet werden, um auf einem Linux-Server Skripte via CGI mit Apache auszuführen:

- Apache muss so konfiguriert werden, dass der Webserver CGI-Skripte ausführen kann.
- Die gewünschten Skripte müssen an den richtigen Ort hochgeladen und mit den erforderlichen Berechtigungen ausgestattet werden.

### Apache-Einstellungen für CGI-Skripte unter CentOS

Öffnen Sie die Apache-Konfigurationsdatei `httpd.conf` zur Bearbeitung:

```bash
sudo nano /etc/httpd/conf/httpd.conf
```

Finden Sie den folgenden Abschnitt:

```text
#
# "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>
```

Ersetzen Sie die Zeile `Options None` durch die folgenden zwei Zeilen:

```text
Options +ExecCGI
AddHandler cgi-script .cgi .pl .py
```

Die erste Zeile weist den Apache an, CGI-Dateien auszuführen, die in das Verzeichnis `/var/www/cgi-bin` hochgeladen werden. Die zweite Zeile teilt dem Apache mit, dass jede Datei mit der Endung .cgi,.pl (Perl-Skripte) oder.py (Python-Skripte) als CGI-Skript betrachtet wird.

Der ganze Abschnitt sollte nun folgendermaßen aussehen:

```text
#
# "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options +ExecCGI
    AddHandler cgi-script .cgi .pl
    Require all granted
</Directory>
```

Speichern und beenden Sie die Datei. Starten Sie dann den Apache neu, damit die Änderungen wirksam werden:

```bash
sudo systemctl restart httpd
```

### Apache-Einstellungen für CGI-Skripte auf Ubuntu

In Ubuntu-Systemen wie Ubuntu 22.04 ist der Apache standardmäßig so konfiguriert, dass er die Ausführung von CGI-Skripten im angegebenen Verzeichnis `/usr/lib/cgi-bin` erlaubt. Sie müssen keine Apache-Konfigurationen ändern. Allerdings **muss das CGI-Modul des Apache aktiviert werden**, bevor CGI-Skripte ausgeführt werden können. Dazu müssen Sie einen Symlink (symbolische Verknüpfung) erstellen:

```bash
sudo ln -s /etc/apache2/mods-available/cgi.load /etc/apache2/mods-enabled/
```

Starten Sie dann den Apache neu, damit die Änderungen wirksam werden:

```bash
sudo systemctl restart apache2
```

## CGI-Skript hochladen und Berechtigungen festlegen

Um die Funktionalität von CGI-Skripten auf Ihrem Apache-Server zu überprüfen, empfehlen wir, mit einem **Testskript** zu beginnen. Erstellen Sie zu diesem Zweck die Datei `test.cgi` in dem vom Server angegebenen cgi-bin-Verzeichnis und öffnen Sie das Testskript zur Bearbeitung:

- **CentOS:** `sudo nano /var/www/cgi-bin/test.cgi`
- **Ubuntu:** `sudo nano /usr/lib/cgi-bin/test.cgi`

Fügen Sie den folgenden Inhalt zu dieser Datei hinzu:

```text
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<h1>Hello world!</h1>";
```

Speichern und beenden Sie die Datei und definieren Sie im nächsten Schritt die notwendigen **Ausführungsberechtigungen**:

- **CentOS:** `sudo chmod 755 /var/www/cgi-bin/test.cgi`
- **Ubuntu:** `sudo chmod 755 /usr/lib/cgi-bin/test.cgi`

Hinweis Durch die Verwendung der Parameter `chmod 755` kann das Skript vom Besitzer gelesen, bearbeitet und ausgeführt werden. Für die Gruppe und sonstige Zugriffe bestehen Lesezugriff und die Möglichkeit, das Skript auszuführen.

Zeigen Sie das Skript in einem Browser an, indem Sie den Domainnamen oder die IP-Adresse aufrufen:

```text
https://example.com/cgi-bin/test.cgi
https://192.168.0.1/cgi-bin/test.cgi
```

Wenn die Einrichtung erfolgreich war, erscheint die im Skript definierte Meldung „Hello world!“.

## Troubleshooting für CGI-Skriptfehler

**404-Fehler**: Tritt ein [404-Error](https://www.ionos.de/digitalguide/websites/webseiten-erstellen/was-bedeutet-der-error-404-not-found/) auf, konnte die jeweilige URL nicht gefunden werden. Überprüfen Sie in diesem Fall als erstes, ob das **Skript dem richtigen Verzeichnis hinzugefügt** wurde.

- **CentOS:** Das Standardverzeichnis ist `/var/www/cgi-bin/`
- **Ubuntu:** Das Standardverzeichnis ist `/usr/lib/cgi-bin`

**500-Fehler**: [HTTP-Error 500](https://www.ionos.de/digitalguide/hosting/hosting-technik/http-error-500-tipps-tricks-zur-problemloesung/) im Zusammenhang mit CGI-Skripten auf Apache sind für gewöhnlich darauf zurückzuführen, dass das Skript nicht über die richtigen Berechtigungen verfügt. Überprüfen Sie, ob das Skript über die Ausführungsberechtigungen (chmod 755) verfügt.


This is a markdown version of: [https://www.ionos.de/digitalguide/server/konfiguration/cgi-skripte-auf-apache/](https://www.ionos.de/digitalguide/server/konfiguration/cgi-skripte-auf-apache/) for AI/LLM consumption.