VolkerRaschek schrieb:
Und wie macht man so was?
Für die Variante SuExec/FastCGI gibt es eine gute Anleitung im Hetzner-Wiki. Es ist nicht ganz trivial einzurichten, lief aber bei mir 2 Jahre lang problemlos.
Die modernere Variante ist PHP-FPM (FastCGI-Process-Manager). Allerdings hab ich dafür noch keine vollständige Anleitung gefunden, daher bin ich dabei einen Blog-Artikel darüber zu schreiben – der ist aber noch nicht fertig. Grundsätzlich ist das aber kein Hexenwerk: (für PHP7 einfach die Version anpassen)
$ apt-get install libapache2-mod-fastcgi php5-fpm
Die Konfiguration von FPM liegt dann unter /etc/php5/fpm. Dort kannst du mal die php-fpm.conf überfliegen, dort sollte aber alles passen. Anschließend kannst du deine entsprechenden Pools konfigurieren. Diese liegen in /etc/php5/fpm/pool.d/. Als Beispiel dient der Pool www.conf, den ich allerdings nur als Referenz nutzen würde, und daher deaktivieren (da reicht ein mv www.conf www.conf_inactive). Bei mir sieht so eine Konfiguration dann so aus:
[cloud]
user = www-user-cloud
group = www-user-cloud
listen = /var/run/php5-fpm-cloud.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = dynamic
pm.max_children = 512
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
;pm.status_path = /status
;ping.path = /ping
access.log = "/var/www/sites/cloud.misterunknown.de/logs/php-$pool.access.log"
access.log = "/var/www/sites/cloud.misterunknown.de/logs/php-$pool.access.log"
access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
slowlog = "/var/www/sites/cloud.misterunknown.de/logs/php-$pool.slow.log"
security.limit_extensions = .php .php3 .php4 .php5
php_flag[display_errors] = off
php_admin_flag[log_errors] = on
php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www-user-cloud@misterunknown.de
php_admin_value[error_log] = "/var/www/sites/cloud.misterunknown.de/logs/php-$pool.error.log"
php_admin_value[memory_limit] = 512M
php_admin_value[open_basedir] = "/var/www/sites/cloud.misterunknown.de:/var/www/sites/cloud.misterunknown.de/tmp:/data/owncloud:/dev/urandom"
php_admin_value[upload_tmp_dir] = "/var/www/sites/cloud.misterunknown.de/tmp"
php_admin_value[session.save_path] = "/var/www/sites/cloud.misterunknown.de/tmp"
php_admin_value[max_execution_time] = 600
Bei PHP-FPM kannst du keine separate php.ini pro Pool angeben, aber du kannst PHP-Werte direkt in der Pool-Konfiguration setzen. Neben der zusätzlichen Sicherheit, dass jeder PHP-Pool als eigener Nutzer läuft, kannst du noch das open_basedir setzen (PHP-Direktive). Damit verhinderst du, dass PHP auch außerhalb des DocumentRoots lesen kann (also dort, wo jeder System-Nutzer lesen könnte). Wenn du alle relevanten Pools konfiguriert hast, kannst du PHP-FPM neustarten.
/etc/init.d/php5-fpm restart
Die VHost-Konfiguration im Apache2 sieht dann so aus:
<VirtualHost *:443>
ServerName cloud.misterunknown.de
…
DocumentRoot /var/www/sites/cloud.misterunknown.de/htdocs
<Directory /var/www/sites/cloud.misterunknown.de/htdocs>
Require all granted
AllowOverride All
</Directory>
<FilesMatch "\.php$" >
SetHandler "proxy:unix:/var/run/php5-fpm-cloud.sock|fcgi://localhost"
</FilesMatch>
<Proxy "fcgi://localhost">
</Proxy>
…
</VirtualHost>
Es kann sein, dass du das Apache2-PHP-Modul noch deinstallieren musst. Das weiß ich aber nicht genau, da das bei mir vorher schon nicht installiert war. Im Zweifelsfall kannst du aber einfach per phpinfo() nachschauen, wie PHP angesprochen wurde.