How-To: nginx, PHP-FPM (multiple Sockets), MySQL und Subdomains in Debian Wheezy/Jessie

Im Gegensatz zu dem Klassiker „LAMP“ (Linux, Apache, MySQL und PHP), beschreibe ich hier die Methode „LNMP“, also weniger Apache, mehr nginx. Als kleine Zugabe soll jeder Server (jede Site/Subdomain) einen eigenen PHP Socket zugeteilt bekommen und durch „open_basedir“ der Zugriff auf die eigene Site limitiert werden.

Changelog

  • 07.06.2015 – PHP: Fix für Debian Jessie (danke an Kevin für den Hinweis!)
  • 03.08.2014 – „date.timezone“ und „listen.allowed_clients“ gesetzt
  • 17.01.2014 – Kritische Funktionen deakvieren
  • 18.05.2014 – „listen.*“-Parameter für PHP5-FPM, welche nun Pflicht sind

Das Szenario

Um alles ein wenig Anschaubarer zu machen, gehe ich von folgendem Umstand aus:

Das Szenario
Das Szenario

Es wird davon ausgegangen, dass für die Domäne „domain.tld“ ein A-Record „*“ besteht, welcher alle Anfragen auf die öffentliche IP des Webservers leitet. Während des Schreibens habe ich meine lokale „hosts“ Datei („/etc/hosts“) abgeändert, um die Konfiguration zu testen, wobei „192.168.67.129“ die IP meines Test-Servers ist. Zum Ausprobieren ohne Domäne sehr hilfreich:

192.168.67.129 domain.tld
192.168.67.129 www.domain.tld
192.168.67.129 notavailable.domain.tld
192.168.67.129 custom1.domain.tld
192.168.67.129 custom2.domain.tld

Wie bereits beschrieben erhalten alle Sites einen eigenen PHP Socket mit zusätzlichem Attribut für das „open_basedir“.

Installation

Es reicht grundsätzlich die Installation folgender Pakete aus:

apt-get install nginx mysql-server mysql-client php5-fpm php5-mysql

Während der Installation von MySQL wird ein Passwort für den root-Benutzer abgefragt, welches frei wählbar ist aber sich von dem des lokalen root-Benutzers Unterscheiden sollte.

Natürlich gibt es verschiedene nginx Pakete mit unterschiedlichen Funktionen. Das Paket „nginx“ installiert z.B. „nginx-full“. Eine Übersicht gibt es hier

Abhängig von der später eingesetzten Software (Drupal, Joomla, WordPress, Webmail etc.), können noch weitere PHP-Module benötigt werden. Diese Abhängigkeiten werden natürlich in den Dokumenten der Anbieter beschrieben. „php5-mysql“ ist das Modul zur Anbindung an die die MySQL Datenbank.

Konfiguration

Ein kleines bisschen Sicherheit

Es ist immer zu empfehlen, die Version des Webservers und PHP zu verstecken. Selbstverständlich werden so keine Angriffe verhindert, allerdings kann das Auffinden von anfälligen (veralteten) Versionen erschwert werden. Folgende zwei Dateien dazu editieren:

/etc/nginx/nginx.conf:

server_tokens off;

/etc/php5/fpm/php.ini:

expose_php = Off

Für alle Sockets sollten zudem kritische Funktionen zum Ausführen von Anwendungen deaktiviert werden. Diese können für einzelne Sockets bei Bedarf freigegeben werden:

/etc/php5/fpm/php.ini:

disable_functions=phpinfo,exec,shell_exec,system,passthru

Auch MySQL kann schnell minimal abgesichert werden, dazu „mysql_secure_installation“ ausführen:

Enter current password for root (enter for none): Passwort von der Installation des MySQL eingeben
Change the root password? [Y/n] n
Alles Weitere mit Enter bestätigen

Einrichtung der Sites

Zuerst die Sites bereinigen:

rm /etc/nginx/sites-*/*

Und im Anschluß vier neue Sites anlegen (z.B. via „nano“):

/etc/nginx/sites-available/default:

server {
       listen         80;
       rewrite        ^ http://www.domain.tld permanent;
}

/etc/nginx/sites-available/www:

server {
        listen 80;

        root /usr/share/nginx/www;
        access_log /var/log/nginx/access_log_www;
        index index.html index.htm index.php;

        server_name domain.tld www.domain.tld;

        location / {
        }

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm-www.sock;
                fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}

/etc/nginx/sites-available/custom1:

server {
        listen 80;

        root /usr/share/nginx/custom1;
        access_log /var/log/nginx/access_log_custom1;
        index index.html index.htm index.php;

        server_name custom1.domain.tld;

        location / {
        }

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm-custom1.sock;
                fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}

/etc/nginx/sites-available/custom2:

server {
        listen 80;

        root /usr/share/nginx/custom2;
        access_log /var/log/nginx/access_log_custom2;
        index index.html index.htm index.php;

        server_name custom2.domain.tld;

        location / {
        }

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php5-fpm-custom2.sock;
                fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
                fastcgi_index index.php;
                include fastcgi_params;
        }
}

Hinweis: Durch „server_name“ reagieren die Sites nur auf eben ihren Namen.

Nun die Sites für nginx sichtbar machen:

cd /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/* .

Wichtig: Die Site „default“ ist die Anlaufstelle für Aufrufe der IP-Adresse oder unbekannten Sub-Domains. Für unsere Konfiguration werden diese Aufrufe auf www.domain.tld umgeleitet, dafür steht der „redirect“.

Einrichtung der PHP Sockets

Der PHP FastCGI Process Manager (php-fpm) durchsucht das Verzeichnis „/etc/php5/fpm/pool.d“ nach zu erstellenden Sockets. Alle vorhandenen vorab löschen:

rm /etc/php5/fpm/pool.d/*

Drei neue Konfigurationen werden hier erstellt, die „Listener“ entsprechen denen aus den Sites:

/etc/php5/fpm/pool.d/www.conf:

[www]
listen = /var/run/php5-fpm-www.sock
listen.backlog = 4096
user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data
listen.allowed_clients = 127.0.0.1
listen.mode = 0660
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 3
pm.max_spare_servers = 5
pm.max_requests = 40
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_admin_value[open_basedir] = /usr/share/nginx/www/:/tmp/
php_admin_value[date.timezone] = Europe/Berlin

/etc/php5/fpm/pool.d/custom1.conf:

[custom1]
listen = /var/run/php5-fpm-custom1.sock
listen.backlog = 4096
user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data
listen.allowed_clients = 127.0.0.1
listen.mode = 0660
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 3
pm.max_spare_servers = 5
pm.max_requests = 40
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_admin_value[open_basedir] = /usr/share/nginx/custom1/:/tmp/
php_admin_value[date.timezone] = Europe/Berlin

/etc/php5/fpm/pool.d/custom2.conf:

[custom2]
listen = /var/run/php5-fpm-custom2.sock
listen.backlog = 4096
user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data
listen.allowed_clients = 127.0.0.1
listen.mode = 0660
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 3
pm.max_spare_servers = 5
pm.max_requests = 40
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_admin_value[open_basedir] = /usr/share/nginx/custom2/:/tmp/
php_admin_value[date.timezone] = Europe/Berlin

Das Limit der Backlogs kann nicht einfach beliebig erhöht werden, das System hat hierfür ein globales Limit (Standard: 1000), welches in der Datei /etc/sysctl.conf eingestellt werden kann:

echo "net.core.netdev_max_backlog=4096" >> /etc/sysctl.conf
echo "net.core.somaxconn=4096" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog=4096" >> /etc/sysctl.conf
sysctl -p # Änderungen einlesen

Die „pm“ Attribute haben großen Einfluss auf die Leistung und Resourcenverwendung von PHP auf das System. Damit auch auf die Website. Zur besseren Konfiguration nach Bedarf einfach Google bemühen, da eine Erklärung zu komplex für dieses How-To wäre. Läuft auf der Site „custom1“ beispielsweise eine weitaus komplexere Anwendung (~Joomla) als auf „custom2“ (~Postfixadmin), sollten die Einstellungen natürlich angepasst werden.
Kleiner Hinweis: Bei sehr, sehr vielen Sites mit vielen Prozessen, könnte irgendwann auch die Einstellung „fs.file-max“ in der Datei „/etc/sysctl.conf“ wichtig werden.

Die „php_admin_value“ Attribute können ebenfalls eingesetzt werden, um die globalen Einstellungen aus der Datei „/etc/php5/fpm/php.ini“ zu überschreiben. Zum Beispiel lassen sich eigene memory_limits einrichten.

Verzeichnisse und Dateien anlegen

Die Verzeichnisse der Sites dieses Beispiels liegen unter „/usr/share/nginx“.
Achtung: Möchte man einen anderen Ort hierfür wählen, müssen die Sockets („open_basedir“) sowie die Site Konfigurationen angepasst werden!

Das Webroot bereinigen und die neuen Ordner für die Sites anlegen, abschließend den Besitzer auf www-data abändern:

rm -r /usr/share/nginx/*
mkdir /usr/share/nginx/{www,custom1,custom2}
chown -R www-data:www-data /usr/share/nginx/*

Access- und Error-Log

Der Speicherort ist selbstverständlich frei wählbar, allerdings muss das Verzeichnis exisiteren, damit die Dateien von nginx automatisch erstellt werden.

In den Site Konfigurationen ist der Speicherort „/var/log/nginx“ für die Access Logs jedoch gezielt gewählt, da hier die automatisch mit der Installation von nginx erzeugte Regel für „logrotate“ greift. Die Regel befindet sich in der Datei „/etc/logrotate.d/nginx“. Wird der Speicherort also geändert, sollte man sich Gedanken über das rotieren der Logs machen, damit diese nicht den Speicherplatz unnötig belegen. Auch die Übersicht leidet nach einigen Monaten stark. Die vorhandene Regel kann hierzu als Beispiel dienen.

Es ließe sich zusätzlich das „error_log“ per Site definieren, worauf ich in diesem Beispiel verzichtet habe. Die Fehler werden in die global via „/etc/nginx/nginx.conf“ definierte Datei geschrieben. Der Pfad lautet in der Standard-Installation „/var/log/nginx/error_log“.

Der Site „default“ wurde kein solches Attribut erteilt, weshalb hierfür auch die Zugriffe in die globale Datei „/var/log/nginx/access_log“ geschrieben werden.

Fertigstellung

Die Dienste durchstarten

Abschließend die Änderungen übernehmen, indem die zugehörigen Dienste neugestartet werden:

service php5-fpm restart
service nginx restart

Konfiguration testen

Um ganz sicher zu gehen, dass nun alles funktioniert, kann in den Webroots jeweils eine Datei „index.php“ angelegt werden, die die PHP Konfiguration ausgibt („phpinfo“) sowie den Sitename anzeigt:

echo "Sitename CUSTOM1 <br><br> <?php phpinfo(); ?>" > /usr/share/nginx/custom1/index.php
echo "Sitename CUSTOM2 <br><br> <?php phpinfo(); ?>" > /usr/share/nginx/custom2/index.php
echo "Sitename WWW <br><br> <?php phpinfo(); ?>" > /usr/share/nginx/www/index.php

Sieht nicht schön aus, aber erfüllt seinen Zweck.

Zusätzlich die „Worker“ überprüfen:

ps aux | grep php-fpm

ps aux | grep php-fpm
ps aux | grep php-fpm
Die Ausgabe zeigt, dass die definierten Worker auch tatsächlich arbeiten. Da die Konfiguration gerade neugestartet wurde und die Prozesse noch nicht ausgelastet sind, entspricht die Anzahl dem Attribut „pm.start_servers“, nämlich 3.

Viel Erolg!

29 Antworten auf “How-To: nginx, PHP-FPM (multiple Sockets), MySQL und Subdomains in Debian Wheezy/Jessie

  1. Jürgen

    Auch ich habe NGINX als Webserver installiert. Es läuft alles alles gut. Ich habe eine Hompage unter WordPress erstellt. Läuft auch in Verbindung mit der Datenbank. Nun möchte ich vom Browser phpmyadmin aufrufen. Habe schon alles mögliche probiert. Aber es klappt nicht. Da ich kein Linux Profi bin, hier meine Anfrage. Habe auf einem VServer Debian 8 laufen. Für Hilfe wäre ich sehr dankbar.
    MfG Jürgen

  2. Richard

    Hi,

    stelle gerade von Apache auf NGINX um und habe zum Glück deine Anleitungen gefunden. Danke.

    Nun habe ich 2 Fragen.

    1) ich habe ~7 subdomains sdx.domain1.tld .
    Die Hauptdomain domain1.tld soll immer auf http://www.domain1.tld umleiten.
    Da dachte ich, dass diese Variante in der default Datei /etc/nginx/sites-available/default reicht:
    server {
    listen 80;
    rewrite ^ http://www.domain1.tld permanent;
    }

    Habe auch das probiert:
    server {
    listen 80;
    if ($http_host ~* „^domain1.tld$“) {
    rewrite ^ $scheme://www.domain1.tld$request_uri? permanent;
    }
    }

    2) Ich habe vor, dass ich alle Aufrufe meines *.domain1.tld auf https://*.domain1.tld umleite
    Ich benötige aber für domain2.tld die Option, dass diese nur http aufruft, da https nur für domain 1 vorgesehen ist.

    Hast du da einen Tipp für mich?

    Vielen Dank im Voraus,

    LG Richard

    1. Richard

      Hi,

      ad 1 und 2 habe ich gelöst.
      nun bin ich einen Schritt weiter. Ich habe nun ein Problem: Ich möchte phpmyadmin per https://db.domain.tld aufrufen
      nginx hat als root Pfad: /usr/share/nginx/
      phpmyadmin liegt unter /usr/share/phpmyadmin
      Ich habe einen symlink als: /usr/share/nginx/db erstellt.
      Nun erhalte ich einen 500 Server error und gelange nicht auf die phpmyadmin login Seite :-(

      Hatte das schon jemand gelöst? Ich komme hier nicht weiter…

      P.S. Hier noch die Lösung für Punkt 1 und 2:

      server {
      listen 80;
      server_name sd1.domain.tld;
      return 301 https://sd1.domain.tld$request_uri;
      }

      server {
      listen 443 ssl;
      access_log /var/log/nginx/access_log_sd1;
      server_name sd1.domain.tld;

      ssl_certificate /etc/ssl/domain.tld-bundle.crt;
      ssl_certificate_key /etc/ssl/domain.tld.key;

      root /usr/share/nginx/sd1;

      index index.html index.htm index.php;

      location / {
      }

      location ~ \.php$ {
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      fastcgi_pass unix:/var/run/php5-fpm-sd1.sock;
      fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
      fastcgi_index index.php;
      include fastcgi_params;
      }
      }

  3. Monty

    Hallo,

    kurz eine frage ich versuche PhpMyAdmin mit Nginx zu installieren.

    Bekomme es leider nicht hin ich bekomme immer eine Leere weiße seite:
    www:

    server {
    listen 80;

    root /usr/share/nginx/www;
    access_log /var/log/nginx/access_log_www;
    index index.html index.htm index.php;

    server_name xyz.de;

    location / {
    }

    location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm-www.sock;
    fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include fastcgi_params;
    }
    location /phpmyadmin {
    root /usr/share/;
    index index.php index.html index.htm;
    try_files $uri $uri/ /index.php index.php;

    location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    # fastcgi_pass 127.0.0.1:9000;
    # With php5-fpm:
    fastcgi_pass unix:/var/run/php5-fpm-www.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    }
    }

    location /phpMyAdmin {
    rewrite ^/* /phpmyadmin last;
    }
    }

  4. Thomas

    Hallo!
    Danke für diese gute Howto-Anleitung.

    Allerdings kann ich die Testseite
    /usr/share/nginx/www/index.php
    aus mir unbekanntem Grund nicht aufrufen.
    Wenn ich im Browser http://www.domain.tld/index.php eingebe, dann bleibt die Seite einfach leer.

    Ich verstehe (einfach) nicht, warum das nicht funktioniert.
    Im Errorlog sind keine Fehler, und alle notwendigen Prozesse laufen.

    Wie gehe ich am sinnvollsten vor um die Ursache zu ermitteln?

    THX

    1. André P. Autor

      Hi Thomas,
      danke! Öhm, das bekommen wir schon hin…
      Was steht denn so in der Datei /var/log/nginx/error.log und /var/log/php5-fpm.log? Am besten kurz nachdem du die Seite aufgerufen hast mal schauen und auf Pastebin etc. hochladen, wenn möglich.

      Viele Grüße
      André

      1. Thomas

        Hallo Andre,

        ich habe die Konfig und Ausgabe von ps aux | grep php in Pastebin hochgeladen:
        /etc/php5/fpm/pool.d/adminer.conf
        http://pastebin.de/download/?id=10319
        /etc/php5/fpm/pool.d/adminer.conf/awesomeguyz.local.conf
        http://pastebin.de/download/?id=10315
        /etc/nginx/sites-available/adminer
        http://pastebin.de/download/?id=10323
        /etc/nginx/sites-available/awesomeguyz.local
        http://pastebin.de/download/?id=10325
        /etc/nginx/sites-available/00_default
        http://pastebin.de/download/?id=10329
        ps aux | grep php
        http://pastebin.de/download/?id=10333

        Im Log /var/log/nginx/error.log steht nichts drin.
        Auf dem Server, der ursprünglich eine Zentyal-Installation ist, läuft der zugehörige Webservice „Zentyal“ ohne Fehler. Allerdings wird die zugehörige Webseite nicht über eine Subdomain aufgerufen, sondern über Port-Eingabe.

        1. Monty

          Hallo,

          danke für das Tutorial!

          Kurz eine frage ich hab das Problem das er nicht alle sub.domains richtig weiterleitet.

          blungogo.de landet im www Ordner
          tld1.blungogo.de im custom1 Ordner

          nur tld2.blungogo.de landet immer im Custom1 Ordner

          Konfigurationen sind alle richtig wie in der anleitung,

          In der Log von custom2 steht auch nix drin ;(

          Grüße und danke :)

    2. Ben

      Die Lösung ist einfach, der Autor hat hier leider nicht fertig gedacht?
      Der Grund liegt in der Datei /etc/php5/fpm/php.ini
      dort deaktiviert der Autor die phpinfo Funktion:
      disable_functions=phpinfo,exec,shell_exec,system,passthru
      nutzt aber nachher genau diese im Befehl:
      echo „Sitename WWW “ > /usr/share/nginx/www/index.php

      also, in der Datei /etc/php5/fpm/php.ini bei disable_functions= das phpinfo rauslöschen – voilà

      schon klar kommt nur ne weisse Seite :-)

  5. Tomasz

    Alle Achtung für diese sehr gelungene Anleitung. Leider werden die CSS-Strukturen nicht berücksichtigt. Wie implementiere ich diese in v.g. Beispielkonfiguration? Firefox 31.0 meldet 304.
    Vielen Dank im Voraus.

  6. Stefan Mayer

    Hallo,

    ich habe die folgende Konfiguration für eine meiner Domains:

    server {
    listen 80;
    listen [::]:80 default ipv6only=on;

    root /srv/ordner;
    index index.html index.htm index.php;

    server_name domain.de http://www.domain.de;

    rewrite ^/sitemap_index\.xml$ /index.php?sitemap=1 last;
    rewrite ^/([^/]+?)-sitemap([0-9]+)?\.xml$ /index.php?sitemap=$1&sitemap_n=$2 last;

    location / {
    try_files $uri $uri/ /index.php?$args;
    }
    error_page 404 /404/;
    error_page 500 502 503 504 /50x/;
    location = /50x/ {
    root /srv/ordner;
    }

    location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm-domain.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    }

    location ~ /\.ht {
    deny all;
    }
    }

    Wenn ich nun die Domain aufrufe bekomme ich einen „404 Not Found“ Error. Jetzt habe ich mal meine Konfiguration ein bisschen erleichtert:

    server {
    listen 80;
    listen [::]:80 default ipv6only=on;

    root /srv/ordner;
    index index.html index.htm index.php;

    server_name domain.de http://www.domain.de;

    location / {
    try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm-domain.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    }

    location ~ /\.ht {
    deny all;
    }
    }

    Und bekomme einen „502 Bad Gateway“ Error. Ich habe keine Ahnung woran das liegen könnte. Hat einer eine Idee?

    Danke im Vorraus

    Stefan

      1. Stefan Mayer

        //edit:

        Dieser Fehler tritt anscheinend nur mit PHP auf, wenn ich die index.php lösche und sie durch index.html ersetzte fuktioniert es. Hier mal die PHP Konfiguration:

        [domain]
        listen = /var/run/php5-fpm-domain.sock
        listen.backlog = 4096
        user = www-data
        group = www-data
        listen.owner = www-data
        listen.group = www-data
        listen.mode = 0660
        pm = dynamic
        pm.max_children = 10
        pm.start_servers = 3
        pm.min_spare_servers = 3
        pm.max_spare_servers = 5
        pm.max_requests = 40
        env[HOSTNAME] = $HOSTNAME
        env[PATH] = /usr/local/bin:/usr/bin:/bin
        env[TMP] = /tmp
        env[TMPDIR] = /tmp
        env[TEMP] = /tmp
        php_admin_value[open_basedir] = /srv/domain/:/tmp/

        Was ich gerade bemerke ist das wenn ich „sudo sysctl -p“ eingebe, dieser Error kommt:

        error: permission denied on key ’net.core.netdev_max_backlog‘
        net.core.somaxconn = 4096
        error: permission denied on key ’net.ipv4.tcp_max_syn_backlog‘

        MfG

        Stefan

  7. Henning

    Hallo André, grüße dich. Herzlichen Dank für dein Tutorial. Hat mir sehr geholfen, vor allem zum Thema „bad gateway“ zwischen nginx und php-fpm. :)

    Zwei Fragen habe ich , die ich gerne loswerden möchte.

    1) In meiner conf-Datei von php-fpm finde ich „php_admin_value[open_basedir]“ nicht. Ist dieser Wert mittlerweile nicht mehr definierbar? Weisst du darüber etwas?

    2) Kannst du mir sagen, was „listen.backlog“ ist, was das für ein Wert ist? Leider wird selbst auf php.net nicht erklärt, was damit einstellbar ist.

    Danke dir und Gruß
    Henning

    1. André P. Autor

      Hi Henning,
      zum Glück habe ich noch rechtzeitig mitbekommen, dass es da nun Probleme gibt… :)

      Zu 1.) Die Optionen, die via „php_admin_value[ich_bin_eine_option] = und_ich_der_wert“ gesetzt werden, überschreiben die Parameter der Datei „/etc/php5/fpm/php.ini“. Du kannst also eigene Optionen für einen Worker „erzwingen“, falls du für jeden eine eigene Konfiguration vorsiehst. Ich habe „open_basedir“ gewählt, damit jede Site in ihrem Web-Root eingesperrt ist. Mit der „php.ini“ könnte ich das nicht machen (naja, schon, aber komplizierter), da die Optionen hier ja für jede Site gelten würden. Ich hoffe, das war halbwegs verständlich. :) Standard ist das nicht, ich habe es einfach zur Sicherheit eingefügt.

      Zu 2.) Puh, das ist relativ kompliziert und eher eine Netzwerkgeschichte. Wichtig ist auf jeden Fall mein Hinweis im Artikel dazu. Backlog beschreibt etwa die Anzahl an Paketen, die in eine „Warteschlange“ kommen, wenn mehr Pakete reinkommen als der Kernel verarbeiten kann. Die Warteschlange wird dann abgebaut, sobald wieder Resourcen frei sind. Das kann bei sehr hoher Auslastung und wenig Resourcen hin und wieder ein guter Trick sein. Ich wollte es einfach unbedingt mal erwähnen. :)

      Ich hoffe, ich konnte dir helfen!

      Grüße
      André

  8. Klaus

    Hi,
    das ist wirklich eine sehr gute Anleitung welche auch mit einer älteren NGINX ohne Probleme funktioniert hat.
    Nun hab ich V16 aufgesetzt in einer VM mit Debian 7 und bekomme PHP nicht zum laufen.
    Aktueller stand ist, das die PHP Datei anscheinend ausgeliefert wird, aber es wird nichts im Client angezeigt.

    mfg
    Klaus

    1. André P. Autor

      Hi,
      das klingt ja komisch. Kannst du vielleicht deine Error-Logs vom Nginx nach Pastebin hochladen? Standard dürfte sein „/var/log/nginx/error.log“. Evtl. auch mal schauen, ob etwas in „/var/log/php5-fpm.log“ zu finden ist.

      Beste Grüße
      André

Schreibe einen Kommentar

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