CGI-Skripte ausführen auf Apache und Nginx

(Last Updated On: 10. Juni 2015)

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

 

 

Andreas Loibl ist SAP-Berater, Ethical Hacker und Online Marketing Manager und schreibt auf seinem Blog DaFRK Blog über verschiedene Themen in den Sektoren Projektmanagement, Informationstechnik, Persönlichkeitsentwicklung, Finanzen und Zeitmanagement.

DaFRK

Andreas Loibl ist SAP-Berater, Ethical Hacker und Online Marketing Manager und schreibt auf seinem Blog DaFRK Blog über verschiedene Themen in den Sektoren Projektmanagement, Informationstechnik, Persönlichkeitsentwicklung, Finanzen und Zeitmanagement.

Das könnte Dich auch interessieren …

1 Antwort

  1. 10. Juni 2015

    […] auf CGI-Ebene ist CGI Proxy. Hierbei müssen Sie erst CGI auf Ihrem Webserver aktivieren, wie ich es in diesem Blogpost beschrieben habe. Eventuell funktioniert CGI Proxy nur, wenn Sie sich über https-verbinden und weigert sich, mit […]

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.