Apache2 mit mod_cgi und DirectoryMatch
Warum aktivieren wir CGI mit hilfe von DirectoryMatch..? Mit der Directive DirectoryMatch können wir Reguläre Ausdrücke übergeben. In unseren Fall verwenden wir /cgi-bin/
als Regulären Ausdrück. Das heisst, wir können in jedem belibigen Unterverzeichnis ein cgi-bin Verzeichnis erstellen und alle Dateien mit der Endung .cgi
, .pl
und .sh
werden vom Apache dort ausgeführt.
CGI wird mit dem Apache Module mod_cgi bereit gestellt. Dieses Modul muss nur mit folgenden Befehl geladen werden.
root:~# a2enmod cgi
Nun erstellen wir für das CGI Modul eine Konfigurationsdatei.
root:~# vi /etc/apache2/mods-available/cgi.conf
# CGI settings (only allowed in /cgi-bin/ directory)
#
<IfModule mod_cgi.c>
<DirectoryMatch "/cgi-bin/">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
AddHandler cgi-script .cgi .pl .sh
Order allow,deny
Allow from all
</DirectoryMatch>
</IfModule>
Damit die Konfigurationsdatei für das CGI Modul auch geladen wird, erstellen wir noch einen Symlink cgi.conf im /etc/apache2/mods-enabled
Verzeichnis.
root:~# cd /etc/apache2/mods-enabled/
root:/etc/apache2/mods-enabled# ln -s ../mods-available/cgi.conf
Nun erstellen wir unter /var/www/test/cgi-bin
eine test.pl um CGI zu testen.
root:~# cd /var/www/test/cgi-bin
root:/var/www/test/cgi-bin# vi test.pl
#!/usr/bin/perl
print "Content-Type: text/html\n\nHallo Welt!\n";
Nun machen wir die CGI Datei ausführbar.
root:/var/www/test/cgi-bin# chmod 755 test.pl
Damit die Änderungen aktiv werden, müssen wir nur noch den Apache Webserver neu starten.
root:/var/www# /etc/init.d/apache2 restart
In dieser oben beschriebenen Methode ist CGI für den kompletten Server aktiviert. Will man CGI nur für bestimmte Virtual Host einstellen, bindet man die cgi.conf einfach im entsprechenden vhost Datei mit Include ein. Dann sollte man natürlich den Symlink cgi.conf in /etc/apache2/mods-enabled/
wieder entfernen.
root:/var/www# vi /etc/apache2/sites-available/default
# default vhost
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www>
Options Indexes Includes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
# CGI einbinden
Include /etc/apache2/mods-available/cgi.conf
ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
</VirtualHost>