Server Setup · 4 min read · Dec 03, 2025

So richten Sie Apache2 mit mod_fcgid und PHP5 auf Mandriva 2009.1 ein

So richten Sie Apache2 mit mod_fcgid und PHP5 auf Mandriva 2009.1 ein

Version 1.0
Autor: Falko Timme
Folgen Sie mir auf Twitter

Dieses Tutorial beschreibt, wie Sie Apache2 mit mod_fcgid und PHP5 auf Mandriva 2009.1 installieren können. mod_fcgid ist eine kompatible Alternative zum älteren mod_fastcgi. Es ermöglicht Ihnen, PHP-Skripte mit den Berechtigungen ihrer Besitzer anstelle des Apache-Benutzers auszuführen.

Ich gebe keine Garantie, dass dies bei Ihnen funktioniert!

1 Vorbemerkung

Ich verwende in diesem Tutorial einen Mandriva 2009.1-Server mit dem Hostnamen server1.example.com und der IP-Adresse 192.168.0.100.

Ich werde in diesem Tutorial zwei Apache vhosts erstellen, www.example1.com und www.example2.com, um die Verwendung von mod_fcgid zu demonstrieren.

2 Installation von Apache2/mod_fcgi/PHP5

Zuerst aktualisieren wir unsere Paketdatenbank:

urpmi.update -a

Wir können Apache2, mod_fcgid und PHP5 wie folgt installieren (mod_fcgid benötigt apache-mpm-worker anstelle von apache-mpm-prefork, sodass, wenn apache-mpm-prefork derzeit installiert ist, die darauf basierenden Apache-Module entfernt werden, wie z.B. apache-mod_php):

urpmi apache-mpm-worker apache-mod_fcgid php-fcgi

[root@server1 ~]# urpmi apache-mpm-worker apache-mod_fcgid php-fcgi
Die folgenden Pakete müssen entfernt werden, damit andere aktualisiert werden können:
apache-mod_perl-2.0.4-5mdv2009.1.x86_64
(due to conflicts with apache-mpm-worker-2.2.11-10.5mdv2009.1.x86_64)
apache-mod_php-5.2.9-1mdv2009.1.x86_64
(due to conflicts with apache-mpm-worker[>= 2.2.8]) (y/N) <– y
Um Abhängigkeiten zu erfüllen, werden die folgenden Pakete installiert:
Paket Version Release Arch
(medium “Main Updates”)
apache-base 2.2.11 10.5mdv2009.1 x86_64
apache-mod_ssl 2.2.11 10.5mdv2009.1 x86_64
apache-modules 2.2.11 10.5mdv2009.1 x86_64
apache-mpm-prefork 2.2.11 10.5mdv2009.1 x86_64
apache-mpm-worker 2.2.11 10.5mdv2009.1 x86_64
php-fcgi 5.2.9 6.2mdv2009.1 x86_64
(medium “Contrib”)
apache-mod_fcgid 2.2 6mdv2009.1 x86_64
6MB Speicherplatz werden freigegeben.
977KB Pakete werden abgerufen.
Fahren Sie mit der Installation der 7 Pakete fort? (Y/n) <– Y

Als nächstes öffnen wir /etc/php.ini…

vi /etc/php.ini

… und fügen die Zeile cgi.fix_pathinfo = 1 ganz am Ende der Datei hinzu:

| [...] cgi.fix_pathinfo = 1 |

Dann starten wir Apache neu:

/etc/init.d/httpd restart

3 Erstellen von Vhosts für www.example1.com und www.example2.com

Ich werde jetzt zwei vhosts erstellen, www.example1.com (mit dem Dokumentenstamm /var/www/web1/web) und www.example2.com (mit dem Dokumentenstamm /var/www/web2/web). www.example1.com wird dem Benutzer und der Gruppe web1 gehören, und www.example2.com dem Benutzer und der Gruppe web2.

Zuerst erstellen wir die Benutzer und Gruppen:

groupadd web1  
groupadd web2  
useradd -s /bin/false -d /var/www/web1 -m -g web1 web1  
useradd -s /bin/false -d /var/www/web2 -m -g web2 web2  
chmod 755 /var/www/web1  
chmod 755 /var/www/web2

Dann erstellen wir die Dokumentenstämme und machen sie den Benutzern/Gruppen web1 bzw. web2 zu eigen:

mkdir -p /var/www/web1/web  
chown web1:web1 /var/www/web1/web  
mkdir -p /var/www/web2/web  
chown web2:web2 /var/www/web2/web

Wir werden PHP mit suExec ausführen; das Dokumentenstammverzeichnis von suExec ist /var/www, wie der folgende Befehl zeigt:

/usr/sbin/suexec -V
[root@server1 ~]# /usr/sbin/suexec -V  
 -D AP_DOC_ROOT="/var/www"  
 -D AP_GID_MIN=100  
 -D AP_HTTPD_USER="apache"  
 -D AP_LOG_EXEC="/var/log/httpd/suexec_log"  
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"  
 -D AP_SUEXEC_UMASK=077  
 -D AP_UID_MIN=100  
 -D AP_USERDIR_SUFFIX="public_html"  
[root@server1 ~]#

Daher können wir die PHP-Binärdatei (/usr/bin/php-fcgi) nicht direkt aufrufen, da sie sich außerhalb des Dokumentenstammverzeichnisses von suExec befindet. Da suExec keine Symlinks erlaubt, besteht die einzige Möglichkeit, das Problem zu lösen, darin, ein Wrapper-Skript für jede Website in einem Unterverzeichnis von /var/www zu erstellen; das Wrapper-Skript ruft dann die PHP-Binärdatei /usr/bin/php-fcgi auf. Das Wrapper-Skript muss dem Benutzer und der Gruppe jeder Website gehören, daher benötigen wir ein Wrapper-Skript für jede Website. Ich werde die Wrapper-Skripte in Unterverzeichnissen von /var/www/php-fcgi-scripts erstellen, z.B. /var/www/php-fcgi-scripts/web1 und /var/www/php-fcgi-scripts/web2.

mkdir -p /var/www/php-fcgi-scripts/web1  
mkdir -p /var/www/php-fcgi-scripts/web2
vi /var/www/php-fcgi-scripts/web1/php-fcgi-starter

| #!/bin/sh PHPRC=/etc/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-fcgi |

vi /var/www/php-fcgi-scripts/web2/php-fcgi-starter

| #!/bin/sh PHPRC=/etc/ export PHPRC export PHP_FCGI_MAX_REQUESTS=5000 export PHP_FCGI_CHILDREN=8 exec /usr/bin/php-fcgi |

Die PHPRC-Zeile enthält das Verzeichnis, in dem sich die php.ini-Datei befindet (d.h. /etc/ übersetzt zu /etc/php.ini). PHP_FCGI_MAX_REQUESTS ist die maximale Anzahl von Anfragen, bevor ein fcgid-Prozess gestoppt und ein neuer gestartet wird. PHP_FCGI_CHILDREN definiert die Anzahl der PHP-Kinder, die gestartet werden.

Die php-fcgi-starter-Skripte müssen ausführbar sein, und sie (und die Verzeichnisse, in denen sie sich befinden) müssen dem Benutzer und der Gruppe der Website gehören:

chmod 755 /var/www/php-fcgi-scripts/web1/php-fcgi-starter  
chmod 755 /var/www/php-fcgi-scripts/web2/php-fcgi-starter  
chown -R web1:web1 /var/www/php-fcgi-scripts/web1  
chown -R web2:web2 /var/www/php-fcgi-scripts/web2

Jetzt erstellen wir die Apache vhosts für www.example1.com und www.example2.com. Fügen Sie die folgenden beiden vhosts am Ende von /etc/httpd/conf/httpd.conf hinzu:

vi /etc/httpd/conf/httpd.conf

| [...] NameVirtualHost *:80 ServerName www.example1.com ServerAlias example1.com ServerAdmin [email protected] DocumentRoot /var/www/web1/web/ SuexecUserGroup web1 web1 PHP_Fix_Pathinfo_Enable 1 Options +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /var/www/php-fcgi-scripts/web1/php-fcgi-starter .php Order allow,deny Allow from all # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log combined ServerSignature Off ServerName www.example2.com ServerAlias example2.com ServerAdmin [email protected] DocumentRoot /var/www/web2/web/ SuexecUserGroup web2 web2 PHP_Fix_Pathinfo_Enable 1 Options +ExecCGI AllowOverride All AddHandler fcgid-script .php FCGIWrapper /var/www/php-fcgi-scripts/web2/php-fcgi-starter .php Order allow,deny Allow from all # ErrorLog /var/log/apache2/error.log # CustomLog /var/log/apache2/access.log combined ServerSignature Off |

Stellen Sie sicher, dass Sie die richtigen Pfade (und den richtigen Benutzer und die richtige Gruppe in den Zeilen SuexecUserGroup) ausfüllen.

Laden Sie Apache danach neu:

/etc/init.d/httpd reload
Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.