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.