Nach SSL-Installation werden CGIs downgeloadet statt ausgeführt

NorbertH

Registered User
Hallo!

Ich habe einen
Apache 2.0 mit mod_ssl (u.a.) auf
Debian 3.1 laufen
Plesk 7.5.4 sollte helften das Eine oder Andere effektiver zu managen.

Seit heute habe ich ein SSL-Zertifikat das scheinbar tadellos läuft.
Das schließe ich daraus, dass beim Aufruf einer normalen HTML-Datei
via https://www.meinedomain.de/normaledatei.html
im access_ssl_log der Zugriff sauber vom Apache protokolliert wird und kein
Eintrag im error_ssl_log gemacht wird.
So weit so gut.

CGI-Skripte die ich in Perl schreibe werden beim Aufruf
http://www.meinedomain.de/cgi-dir/skript1.pl
machmal auch
http://www.meinedomain.de/cgi-dir/skript2.cgi
evenfalls sauber ausgeführt.

Da vor allem (aber nicht nur) die Ausgabe der Skripte via SSL transportiert werden soll, habe ich gleich mal alle relevanten Aufrufe der Skripten auf
https://www.meinedomain.de/cgi-dir/skript1.pl
bzw.
https://www.meinedomain.de/cgi-dir/skript2.cgi
geändert und siehe da, anstatt die Skripten auszuführen und die Ausgabe an den Browser (ich habe übrigens bisher nur mit Firefox getestet) zu schicken wird beim ersten Aufruf
https://www.meinedomain.de/cgi-dir/skript1.pl
das Skript selbst zum download angeboten und beim 2. Skript
https://www.meinedomain.de/cgi-dir/skript1.cgi
der Inhalt als Textdatei im Browserfenster angezeigt. Im access_ssl_log wird der Zugriff in beiden Fällen ganz normal gelistet.

Da SSL an sich und auch die Skripten selbst funzen schließe ich auf einen Fehler in der Konfiguration des Apache. Trotzdem habe ich nochmal überprüft:
Rechte 777
Upload via ASCII
Shebang stimmt

Ich kann mich auch erinnern, dass ich beim Einrichten des Apache mit Plesk vor ein paar Monaten Probleme mit der Ausführung der Skripten hatte. Damals hatte ich mir die Power Toys geholt und den VHOST CONF writer genutzt um meine "Sript Wünsche" durchzusetzen. Das ist tatsächlich die einzige Datei, die ich händisch bearbeite, alle anderen bearbeitet Plesk.
Hier mal die wichtigen Stellen:
aus der /etc/apache2/httpd.include :
Code:
NameVirtualHost mei.ne.IP.adr:80
NameVirtualHost mei.ne.IP.adr:443
ServerName mein.servername.de
...
Include /var/www/vhosts/meinedomain.de/conf/httpd.include
...

/var/www/vhosts/meinedomain.de/conf/httpd.include :
Code:
<IfModule mod_ssl.c>

<VirtualHost mei.ne.IP.adr:443>
	ServerName   meinedomain.de:443
	ServerAlias  www.meinedomain.de
...
	DocumentRoot /var/www/vhosts/meinedomain.de/httpdocs
...
	SSLEngine on
	SSLVerifyClient none
	SSLCertificateFile /opt/psa/var/certificates/dateinamemitzertundprivatkey
	<Directory /var/www/vhosts/meinedomain.de/httpdocs>
...
		SSLRequireSSL
		Options -Includes -ExecCGI
	</Directory>
...
</VirtualHost>

</IfModule>

<VirtualHost mei.ne.IP.adr:80>
	ServerName   meinedomain.de:80
	ServerAlias  www.meinedomain.de
...
	DocumentRoot /var/www/vhosts/meinedomain.de/httpdocs
...
	<IfModule mod_ssl.c>
		SSLEngine off
	</IfModule>
	<Directory /var/www/vhosts/meinedomain.de/httpdocs>
...
	Options -Includes -ExecCGI
	</Directory>
...
	Include /var/www/vhosts/meinedomain.de/conf/vhost.conf
</VirtualHost>

/var/www/vhosts/meinedomain.de/conf/vhost.conf :
Code:
<Directory /var/www/vhosts/meinedomain.de/httpdocs/cgi-dir>
AddHandler cgi-script .cgi .pl
Options ExecCGI
</Directory>
<Directory /var/www/vhosts/meinedomain.de/httpdocs/cgi-dir>
<IfModule mod_perl.c>
<Files ~ (\.mp$)>
SetHandler perl-script
PerlHandler ModPerl::Registry
Options ExecCGI
allow from all
PerlSendHeader On
</Files>
</IfModule>
</Directory>

Das Kontstukt in der vhost.conf ist sicher ungewöhnlich, führt aber ohne SSL zum erwünschten Ergebnis. Ich denke da muß nur noch irgendwie SSL mit rein.
Plesk ist bewußt auf "Benutze ein einzelnes Verzeichnis zum Unterbringen von SSL- und nicht-SSL-Inhalten" eingestellt. Deshalb kein httpsdocs.

Ich habe den ganzen Nachmittag gegooglet, aber ein Prob in dieser Form konnte ich nicht finden.

Any ideas?
 
NorbertH said:
Include /var/www/vhosts/meinedomain.de/conf/vhost.conf
Dieser Include bindet die CGI-Funktionen ein. Aber er steht (so wie oben gekürzt) nur im vHost für den 80er Port. Der SSL-vHost sollte ebenfalls diesen Include haben.

huschi.
 
Wo war noch 'mal der Baum?

:)
Na das war ja ein ganzer Regenwald, der den Baum versteckt hat.

DANKE :) DANKE :) DANKE :)

Allerdings habe ich fast den Verdacht, dass da ein Bug im Plesk mitgeholfen hat.
In der
/var/www/vhosts/meinedomain.de/conf/httpd.include
steht gleich am Anfang.
Code:
# ATTENTION!
# DO NOT MODIFY THIS FILE OR ANY PART OF IT. THIS CAN RESULT IN IMPROPER PLESK
# FUNCTIONING OR FAILURE, CAUSE DAMAGE AND LOSS OF DATA. IF YOU REQUIRE CUSTOM
# MODIFICATIONS TO BE APPLIED TO THE CONFIGURATION, PLEASE, PERFORM THEM IN THE
# FOLLOWING FILE(S):
# /var/www/vhosts/meinedomain.de/conf/vhost.conf
# /var/www/vhosts/meinedomain.de/conf/vhost_ssl.conf
# /var/www/vhosts/meinedomain.de/subdomains/<subdomain-name>/conf/vhost.conf
Offensichtlich hat Plesk den Container
<VirtualHost mei.ne.IP.adr:443>
angelegt ohne (wie beim 80er) den
Include /var/www/vhosts/meinedomain.de/conf/vhost_ssl.conf
Dann wäre mir das vermutlich auch selbst aufgefallen.
... Na ja, aber das wäre doch zu blöd. Vielleicht hab auch ich vor ein paar Monaten doch in der Datei rumgefummelt. Ist jedenfalls wahrscheinlicher ;)

Wie auch immer, ES FUNZT UND VIELEN DANK NOCH EINMAL!
 
NorbertH said:
angelegt ohne (wie beim 80er) den
Include /var/www/vhosts/meinedomain.de/conf/vhost_ssl.conf
Die vhost.conf legt auch nicht Plesk an, sondern der User/Admin.
Und da evtl. Plesk die include wieder überschreibt solltest Du einfach ne Kopie der vhost.conf nach vhost_ssl.conf erstellen. Denn das vorhanden sein der Dateien reicht, daß Plesk sie an der richtigen Stelle einbindet.

huschi.
 
Back
Top