CGI-Skripte ausführen auf Apache und Nginx

In diesem Post beschreibe ich kurz wie Sie den Apache oder Nginx-Webserver so konfigurieren, dass dieser CGI-Skripte ausführt. Das ist immer dann notwendig, wenn sie eine in CGI geschriebene Webanwendung ausführen wollen. Berühmte Beispiele sind beispielsweise CGIProxy oder verschiedene Administrationsoberflächen wie beispielsweise Webmin.

Apache

Als erstes müsst ihr auf Kommandozeilenebene das Module mod_cgi aktivieren

$>sudo a2enmod cgi

$>sudo service apache2 restart

Dann müsst ihr rigendwo auf eurem System noch einen Ordner machen, der für CGI-Skritpe vorgesehen sen soll. Ihr solltet eure CGI-Webanwendungen nämlcih nicht in der documentRoot des webservers speichern,a slo beispielsweise nicht unterhalb von /var/www. Sinnvoll wäre beispielsweise ein Ordner wie /usr/local/apache2/cgi-bin. Dem User, unter dem der Apache läuft (meist www-data) müsst ihr dann Ownership auf diesen Ordner geben.

mkdir /usr/local/apache2/cgi-bin

chown -R www-data.www-data /usr/local/apache2/cgi-bin

Dann müsst ihr in der /etc/apache2/apache2.conf diesen Ordner mit der Direktive ScriptAlias einbauen. Ein ScriptAlias im Format

ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/ 

beispielsweise würde bewirken, dass wenn ein Besucher http://<FQDN>/cgi-bin/ eingibt, die Webanwendung angezeigt bekommt, die ihr unter /usr/local/apache2/cgi-bin gespeichert habt.

Wenn ihr hingegen darauf besteht, dass ihr die CGI-Webanwendung in einem Unterordner unterhalb der Documentroot (meist /var/www) speichern könnt, dann müsst ihr für diesen Unterordner eine Direktive erstellen und dort explizit CGI aktivieren. Das würde ebenfalls in der /etc/apache2/apache2.conf passieren und dann so aussehen:

<Directory /usr/local/apache2/htdocs/somedir>

  Options +ExecCGI

  </Directory> 

außerhalb dieser Directory-direktive müsst ihr dem Apache 2 Webserver dann noch in der /etc/apache2/apache2.conf sagen, welche Dateiendungen als CGI-Skritpe behandelt werden sollen. sinn machen hier in der Regel die erweiterungen .cgi, .py für Python und .pl für Perl.

AddHandler cgi-script .cgi .pl .py

Jetzt dürft ihr nur noch nicht vergessen, dass der User, unter dem der Apache läuft (meist www-data) Ownership auf den Unterordner der CGI-Webanwendung haben muss und dass die CGI-Dateiena usführbar sein müssen

chown -R www-data.www-data /var/www/cgi-bin

chmod -R +x /var/www/cgi-bin

Spätestens jetzt sollte es gehen.

Nginx

Unte rdem Nginx Webserver leiten wir CGI-Anfragen an Thttpd weiter, der auf Port 8000 läuft. Als erstes müssen wir Thttpd installieren.

apt-get install thttpd

iw breabreiten die /etc/default/httpd-Datei und setzen den Aprameter ENABLED

ENABLED=yes

Nun machen wir ein Backup von der /etc/httpd/httpd.conf und erstellen diese dann neu, mit folgendem Inhalt:

# BEWARE : No empty lines are allowed!

# This section overrides defaults

# This section _documents_ defaults in effect

# port=80

# nosymlink         # default = !chroot

# novhost

# nocgipat

# nothrottles

# host=0.0.0.0

# charset=iso-8859-1

host=127.0.0.1

port=8000

user=www-data

logfile=/var/log/thttpd.log

pidfile=/var/run/thttpd.pid

dir=/var/www

cgipat=**.cgi|**.pl

Wir starten httpdt

/etc/init.d/httpd start
imd ersteööem mim doe Dateo /etc/nginx/proxy.conf mit foglendem inhalt:
proxy_redirect          off;

proxy_set_header        Host            $host;

proxy_set_header        X-Real-IP       $remote_addr;

proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

client_max_body_size    10m;

client_body_buffer_size 128k;

proxy_connect_timeout   90;

proxy_send_timeout      90;

proxy_read_timeout      90;

Nun öffnen wir die konfiugration von nginx und fügen in der Server-Direktive ein

server {

   location /cgi-bin {

      include proxy.conf;

      proxy_pass http://127.0.0.1:8000;

   }

}

Nginx neu starten über

/etc/init.d/nginx reload

in der jetzigen Konfiguration können Sie also ihre CGI-Webanwendung einfach in den Ordner /var/www/cgi-bin einfügen, müssen wieder mit chown Besitztuma fu den User geben, unter dem nginx läuft (meist www-data) und die skripte darin ausführbar machen, dann sollte es gehen.

mkdir /var/www/cgi-bin

chown -R www-data.www-data /var/www/cgi-bin

chmod -R +x /var/www/cgi-bin

 

 

Wenn dir dieser Post gefallen hat, teile ihn doch auf Social Media, abonniere und verfolge mich per E-Mail, RSS-Feed, Social Media oder registriere dich auf meiner Seite. Wenn du registriert bist, like den Post bitte, wenn er dir gefallen hat!

Ein Gedanke zu „CGI-Skripte ausführen auf Apache und Nginx“

Kommentar verfassen