Kategorien
Allgemein Systemadministration

Pendant zu Apache php-cgi und suexec auf Basis von NginX und php-fpm (LEMP Setup)

Möchte man Dritten Webspace zur Verfügung stellen oder generell die Sicherheit auf dem eigenen Server verbessern und verwendet keine Adminoberfläche wie Plex oder CPanel muß man meist selbst Hand anlegen. Mit Apache, php-cgi und suexec gelingt es Apache bzw. PHP unter dem selben Benutzer laufen zu lassen der auch per FTP oder SCP Daten hochlädt. Somit können mehrere Domains besser voneinander getrennt werden. Für NginX ist dies etwas kniffliger aber genauso möglich.

Dieses Beispiel verwendet Ubuntu 14.04 LTS als Basis. Generell ist die Vorgehensweise bei anderen Distributionen identisch oder zumindest ähnlich.

Installation

apt-get install php5-fpm nginx

Konfiguration

Php-fpm

Der Pool-Manager startet für uns die php-fpm Prozesse auf die später NginX zugreift. Nach der Installation gibt es bereits einen www Pool den wir auf unsere Bedürfnisse anpassen können um z.B.
für nicht konfigurierte Domains eine allgemeine Seite anzuzeigen oder auf den Support zu verweisen.

Interessant für uns sind aber die neuen Pools die wir zumindest pro Benutzer anlegen. Möglich wäre dies auch pro Domain pro Benutzer reicht uns aktuell jedoch. Hierzu legen wir unter /etc/php5/fpm/pool.d eine neue Datei web1000.conf an.

Der Name web1000 ist willkührlich gewählt.
Möglich wäre diesen auch mit der uID des
Benutzers abzugleichen.

[web1000]
user = web1000                            # System Username
group = web1000                           # System Groupname 
listen = /var/run/php5-fpm-web1000.sock   # Uniqe Socket per Pool

listen.owner = www-data
listen.group = www-data

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Den Benutzer müssen wir noch anlegen

adduser –disabled-password web1000

Und danach den Pool-manager neu starten.

service php5-fpm restart

Unter /var/run/ sollten nun der neue Socket auftauchen.

NginX

Nun müssen wir NginX noch sagen für welche Domains er auf die verschiedenen php-fpm Pools zugreifen soll. In unserem Beispiel liegen die Projekte unter /home/www/kunde/projekt . Einige bevorzugen sicher einen Pfad in /var das ist aber Geschmacksache und lässt sich leicht anpassen.

Dazu legen wir unter /etc/nginx/sites-available eine neue Datei web1000.conf an

server {
        listen   80;

        root /home/www/web1000/testdomain/docs;
        index index.php index.html index.htm;
        server_name test.canya.rzpool.de;

        error_log /home/www/web1000/testdomain/logs/error.log;
        access_log /home/www/web1000/testdomain/logs/access.log;

        location / {
                try_files $uri $uri/ /index.html =404;
        }

        error_page 404 /404.html;

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
                root /usr/share/nginx/www;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass unix:/var/run/php5-fpm-web1000.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
}

Die Konfiguration ist für alle weiteren Kunden identisch bis auf den angepassten Wert für fastcgi_pass der immer auf den Socket des entsprechenden php-fpm Pools zeigen muß.

Weitere Konfiguration

Ergänzt werden kann das Setup mit sftp mit chroot und PHP basedir restrictions.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

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