Nginx Probleme mit Serverblocks

  • Ersteller Ersteller dieter69
  • Erstellt am Erstellt am
D

dieter69

Gast
Moin.

Ich habe ein Problem mit den nginx Serverblocks welches ich allein nich zu lösen vermag :/
Das Problem ist, dass ich es nicht hinbekomme Subdomains und Domains zu trennen bzw sie bekommen den gleichen DocumentRoot zugewiesen.

Code:
server {
  listen 80;
  server_name test.example.com;
  root /var/www/test.example.com;
  location / {
    index index.php;
  }
  index index.php;
  location ~ .php(/|$) {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
  }
}

server {
  listen 80;
  server_name test.com;
  root /var/www/test.com;
  location / {
    index index.php;
  }
  index index.php;
  location ~ .php(/|$) {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_index index.php;
                include fastcgi_params;
  }
}

Apache-Erfahrungsgemäß würde ich davon ausgehen dass das so funktioniert, tut es aber scheinbar nicht..
 
Hi Dieter,

du solltest für jeden Serverblock auch einen eigenen PHP5-FPM-Socket anlegen.
Bin nichtmal sicher, ob das Funktioniert wenn alle Serverblöcke auf einen einzigen Socket zugreifen.
Vielleicht ist das sogar genau dein Problem ;)

Edit: Die Konfiguration der PHP5-FPM-Sockets findest du unter /etc/php5/fpm/pool.d/

LG,
Matze
 
Zuletzt bearbeitet:
Betrifft das nur PHP oder auch statische Dateien?

Was steht in deiner fastcgi_params denn schönes drin? Hast du vielleicht auch eine phpfpm_params, ich glaube das brauchte ein paar andere Werte.

Auf einer alten Kiste hier sah dieser Block mal so aus:

Code:
    location ~ ^(.*?\.php)(/.*|)$
    {
        # default fastcgi_params:
        include /etc/nginx/fastcgi_params;
        include /etc/nginx/phpfpm_params;

        # fastcgi_split_path_info requires nginx >= 0.7.31
        fastcgi_split_path_info ^(.*?\.php)(/.*|)$;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;

        # security: check that the PHP file actually exists
        try_files $1 =404;

        # disable cache for PHP
        expires -1;

        # SCRIPT_NAME needs to remain without the document_root on front
        # Otherwise PHP_SELF breaks, the interpreter will still find the file
        # because of the added SCRIPT_FILENAME parameter below
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;

        # This one was added right into the file, since with root moved, and path_info split
        # It should no longer need to be set manually for each virtual host
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        # pass the request to fastcgi-php
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }

Aber das ist schon ewig nicht mehr angefasst worden. Und auch bloss irgendwoanders herkopiert.

Ich mag nginx aber gerade diese PHP Konfiguration ist schon eine üble Grütze. Da blickt kaum einer durch und beim Copy&Paste von sonstwo kann man nur Fehler machen. Selbst in vielen Anleitungen steht das falsch drin.

Und wenn du nicht prüfst ob die PHP Datei wirklich existiert dann können am Ende deiner User PHP-Code in ihren Avatarbildern hochladen und ausführen. In der nginx FAQ stehen so ein paar versteckte Fußfallen drin auf die man unbedingt achten sollte...

PHP frisst eben alles und bei nginx gibt es keinen fest eingebauten Schutz gegen solche Fehler und auch keine eindeutige Referenz wie diese Config richtig auszusehen hat (oder vielleicht gibts da inzwischen was im Wiki ...). Allein schon diese ominösen Include-Dateien können sich zwischen den einzelnen Linuxdistributionen unterscheiden so daß selbst ein kopierter Serverblock nicht unbedingt das gleiche macht wie von der Anleitung vorgesehen
 
Zuletzt bearbeitet:
Zurück
Oben