Check out the Latest Articles:
Apache2-mpm-worker Installation mit SuExec und PHP5-fcgi



PHP als Apache-Modul benutzt das CGI (Common Gateway Interface) um Anfragen an einen Webserver zu senden und das Resultat wieder an den Webbrowser zurückzusenden.
Dabei wird für jede Anfrage ein neuer Prozess erstellt, der nach der Verarbeitung des Scripts wieder beendet wird.
Hierdurch kann ein Overhead entstehen, da oftmals der Start des Scripts mehr Zeit in Anspruch nimmt, als dessen Verarbeitung. Weiterhin muss jedes Mal der PHP-Interpreter in den Speicher geladen werden.

Um diese Nachteile zu vermeiden ist die Verwendung von PHP5-fcgi ratsam, da unter FastCGI das auszuführende Programm (und der Interpreter) nur einmal geladen wird. Es steht dann für mehrere Requests zur Verfügung. Hierbei spielt es dann keine Rolle, ob der Request vom selben Client oder von unterschiedlichen Clients stammt.

Bei http://phpperformance.de findet sich eine sehr gute und detaillierte Erläuterung, welche Vor- und Nachteile mit der Benutzung von Fcgi in Kombination mit PHP5 einhergehen.

  1. Zuerst müssen die entsprechenden Pakete installiert werden. Sollte der Apache mpm-prefork vorhanden sein, wird dieser bei der Installation der neuen Pakete automatisch entfernt.
          apt-get install libapache2-mod-fcgid php5-cgi apache2.2-common apache2-utils apache2-mpm-worker apache2-suexec
          
  2. Jetzt aktivieren wir die beiden Module fcgi und SuExec:

          a2enmod fcgid
          a2enmod suexec
          
  3. Nun brauchen wir einen Account bzw. einen User, unter dessen Rechten PHP5 in Zukunft läuft. Danach muss er noch der Gruppe www-data zugewiesen werden.

          adduser test
          usermod -G test -a www-data
          

    Der Parameter -a hängt die neue Gruppe an die bisherigen an und erhält damit die Gruppenzugehörigkeiten.

  4. Verzeichnisse anlegen
    Nun legen wir die Verzeichnisse für den User an und weisen ihm die Rechte zu:

          mkdir /var/www/test.tld
          chown root:test /var/www/test.tld
          chmod 750 /var/www/test.tld
          mkdir /var/www/test.tld/conf
          mkdir /var/www/test.tld/www
          mkdir /var/www/test.tld/logs
          mkdir /var/www/test.tld/tmp
          mkdir /var/www/test.tld/php5
          chown test:test /var/www/test.tld/*
          chmod 750 /var/www/test.tld/*
          
  5. php.ini anpassen
    Nun kopieren wir die php.ini in das Userverzeichnis.

          cp /etc/php5/cgi/php.ini /var/www/test.tld/conf
          
  6. Um die Sicherheit etwas zu erhöhen editieren wir die php.ini. Mit diesen Einstellungen begrenzen wir den PHP-Prozess und die Sessiondaten auf das Userverzeichnis. Die hochgeladenen Dateien werden in ein eigenes temporäres Verzeichnis gespeichert.

          vim /var/www/test.tld/conf/php
          open_basedir      = /var/www/test.tld/www/:/var/www/test.tld/tmp/
          upload_tmp_dir    = /var/www/test.tld/tmp
          session.save_path = /var/www/test.tld/tmp
          
  7. fcgi Starter erstellen:
    Die Magic Line: #!/bin/sh am Anfang ist wichtig! Ohne den Eintrag würde das Betriebssystem die Ausführung verweigern.

    cat > /var/www/test.tld/php5/php-fcgi-starter << "EOF"
    #!/bin/sh
    PHPRC="/var/www/test.tld/conf/"
    export PHPRC
    exec /usr/bin/php5-cgi
    EOF
    
  8. Nun werden die Benutzer- und Zugriffsrechte gesetzt.

          chown test:test /var/www/test.tld/php5/php-fcgi-starter
          chmod 750 /var/www/test.tld/php5/php-fcgi-starter
          
  9. Als Nächstes wird der FCGI-Starter mit einem Schreibschutz belegt. Das hat zur Folge, dass er nicht mehr verändert werden kann. Um dies rückgängig zu machen, muss statt dem Parameter +i, -i verwendet werden.

          chattr +i -V /var/www/test.tld/php5/php-fcgi-starter
          
  10. Vhost anlegen:

    cat > /etc/apache2/sites-available/test.tld << "EOF"
    <VirtualHost *>
        ServerAdmin chris@test.tld
        ServerName test.tld
        SuexecUserGroup test test
        AddHandler fcgid-script .php
        DocumentRoot "/var/www/test.tld/www"
        DirectoryIndex index.htm index.html index.php
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory "/var/www/test.tld/www">
        Options Indexes MultiViews FollowSymLinks +ExecCGI
        FCGIWrapper /var/www/test.tld/php5/php-fcgi-starter .php
        Order allow,deny
        allow from all
    </Directory>
    ErrorLog /var/www/test.tld/logs/error.log
    LogLevel warn
    CustomLog /var/www/test.tld/logs/access.log combined
    ServerSignature On
    </VirtualHost>
    EOF
    
  11. Abschließend wird der Vhost aktiviert und danach der Server neu gestartet.

          a2ensite test.tld
          /etc/init.d/apache2 restart
         



  1. It‘s quite in here! Why not leave a response?




Blogverzeichnis - Blog Verzeichnis bloggerei.de   Blogverzeichnis   Blog and ping   Blog Top Liste - by TopBlogs.de   Bloggeramt.de   Blog Directory   powered by rankingcloud