Zusammenspiel nginx und php-fpm

Mardor

Well-Known Member
Hi,

ich habe in einem meiner Jails nginx und php versucht zum Laufen zu bewegen, leider ohne Erfolg.

So sehen meine Konfigurationsdateien aus
Code:
/usr/local/etc: vim /usr/local/etc/nginx/nginx.conf

...
location ~ \.php$ {
root           html;
fastcgi_pass unix:/var/run/php72-fpm.sock;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
include        fastcgi_params;
}
...

Code:
/usr/local/etc: cat /usr/local/etc/php-fpm.d/www.conf

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = www
group = www

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /var/run/php72-fpm.sock

Code:
/usr/local/www/nginx: cat info.php
<?php phpinfo(); ?>

Die Verzeichnisrechte sind wie folgt:

Code:
/usr/local/www/nginx: ls -alhR
total 1
dr-xr-xr-x  2 root  wheel     6B 11 Okt. 19:22 .
drwxr-xr-x  3 root  wheel     4B 11 Okt. 17:23 ..
-rw-r--r--  1 root  wheel   537B 17 Apr. 17:22 50x.html
-rw-r--r--  1 root  wheel     0B 11 Okt. 14:34 EXAMPLE_DIRECTORY-DONT_ADD_OR_TOUCH_ANYTHING
-rw-r--r--  1 root  wheel   612B 17 Apr. 17:22 index.html
-rw-r--r--  1 root  wheel    20B 11 Okt. 18:26 info.php

Ich kann nginx auch starten und kann die Startseite aufrufen, aber ich erhalte beim Aufruf der info.php folgende Fehlermeldung:

Code:
xtail -f /usr/jails/aaaa/var/log/nginx/                                                                                                                        
*** /usr/jails/aaaa/var/log/nginx//error.log ***
2018/10/16 15:13:05 [error] 18389#100582: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 10.49.1.3, server: localhost, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php72-fpm.sock:", host: "127.0.0.1"

*** /usr/jails/aaaa/var/log/nginx//access.log ***
10.49.1.3 - - [16/Oct/2018:15:13:05 +0200] "GET /info.php HTTP/1.1" 404 27 "-" "ELinks/0.11.7 (textmode; FreeBSD 11.2-RELEASE-p4 amd64; 105x30-2)"

Ich habe im Internet bereits einigen gefunden und auch die Berechtigungen untersucht, aber überhaupt nichts gefunden.
Hat jemand für mich eine Idee ?
 
Hi,

also wenn ich mit die Rechte von /var/run/php72-fpm.sock anschaue dann sehe ich srw-rw---- für Benutzer und Gruppe www.
Das sollte doch korrekt sein oder ?
 
Code:
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream,

Das bedeutet, dass nginx nicht alle benötigten Parameter an php-fpm übergibt. Wahrscheinlich fehlt dir etwas in deiner 'fastcgi_params'... So in etwa muss sie aussehen:

Code:
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  REQUEST_SCHEME     $scheme;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

fastcgi_param  REDIRECT_STATUS    200;

Nachtrag: Von der Fehlermeldung her würde ich mal auf 'SCRIPT_NAME' tippen.
 
Hallo Yamagi nd Binfort,

danke für eure Antwort.

Die /usr/local/etc/nginx/fastcgi_params hat bereits exact die von Dir beschriebenen Einträge genauso enthalten. Auch SCRIPT_FILENAME war so vorhanden.

Ich hatte testweise in der nginx.conf den Eintrag "/scripts$fastcgi_script_name;" durch "$fastcgi_script_name;" und auch "$fastcgi_script_name;" ersetzt und nginx neu gestartet, aber ich erhalte die gleiche Fehlermeldung.

Der include hat auch schon existiert:

Code:
location ~ \.php$ {
root           html;
fastcgi_pass unix:/var/run/php72-fpm.sock;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
include        fastcgi_params;
}
 
Hi,

entferne bitte erstmal die fastcgi_param-Anweisung aus dem location-Block, sodass nur die Anweisung aus der Datei fastcgi_params gelten.
Dann prüfe, ob die Konfiguration korrekt geladen werden kann:
Code:
# nginx -t
Im Netz sehe ich außerdem verschiedene Artikel, bei denen SCRIPT_FILENAME so definiert ist: $document_root$fastcgi_script_name, probier das mal aus.

Wenn es dann immer noch nicht läuft, finde heraus unter welchem Benutzerkontext dein fastcgi-Daemon läuft.

Achso: Bitte Thread-Titel ändern lassen, das Problem hat keinen Bezug zu Jails.

Rob
 
Hi Yamagi und KobRheTilla,

Vielen Dank

entferne bitte erstmal die fastcgi_param-Anweisung aus dem location-Block, sodass nur die Anweisung aus der Datei fastcgi_params gelten.
Dann prüfe, ob die Konfiguration korrekt geladen werden kann:

Folgende Änderung habe ich vorgenommen:

Code:
location ~ \.php$ {
root           html;
#fastcgi_pass unix:/var/run/php72-fpm.sock;
#fastcgi_index  index.php;
#fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
include        fastcgi_params;
}

Code:
Die Konfiguration wird korrekt geladen, die Fehlermeldung bleibt
*** /usr/jails/aaaa/var/log/nginx//error.log ***
2018/10/17 14:08:02 [error] 82892#100416: *2 open() "/usr/local/etc/nginx/html/info.php" failed (2: No such file or directory), client: 10.49.1.3, server: localhost, request: "GET /info.php HTTP/1.1", host: "127.0.0.1"

*** /usr/jails/aaaa/var/log/nginx//access.log ***
10.49.1.3 - - [17/Oct/2018:14:08:02 +0200] "GET /info.php HTTP/1.1" 404 169 "-" "ELinks/0.11.7 (textmode; FreeBSD 11.2-RELEASE-p4 amd64; 202x33-2)"
---
Wenn es dann immer noch nicht läuft, finde heraus unter welchem Benutzerkontext dein fastcgi-Daemon läuft.

Das sieht für mich nach dem User www aus:
Code:
/etc/rc.d: ps aux
USER   PID %CPU %MEM   VSZ   RSS TT  STAT STARTED    TIME COMMAND
root 12026  0,0  0,0 23252 12520  -  SsJ  Do.19   0:05,31 php-fpm: master process (/usr/local/etc/php-fpm.conf) (php-fpm)
www  12371  0,0  0,0 23316 12596  -  IJ   Do.19   0:00,00 php-fpm: pool www (php-fpm)
www  17363  0,0  0,0 23252 12528  -  IJ   Do.19   0:00,00 php-fpm: pool www (php-fpm)
root 37359  0,0  0,0  6464  2388  -  IsJ  Do.17   0:01,64 /usr/sbin/cron -s
root 42085  0,0  0,0  6412  2488  -  SsJ  Do.17   0:00,68 /usr/sbin/syslogd -s
root 76981  0,0  0,0 11392  7008  -  IsJ  14:07   0:00,00 nginx: master process /usr/local/sbin/nginx
www  82892  0,0  0,0 11392  7484  -  IJ   14:07   0:00,00 nginx: worker process (nginx)
root 24935  0,0  0,0  6940  2732  2  R+J  14:09   0:00,00 ps aux
root 93076  0,0  0,0  6952  2900  2  IJ   21:33   0:00,01 login [pam] (login)
root 98834  0,0  0,0  7468  4104  2  SJ   21:33   0:00,07 -tcsh (tcsh)
---
Im Netz sehe ich außerdem verschiedene Artikel, bei denen SCRIPT_FILENAME so definiert ist: $document_root$fastcgi_script_name, probier das mal aus.

Ich erhalte eine andere Fehlermeldung aber das gleiche Resultat

Code:
location ~ \.php$ {
root           html;
fastcgi_pass unix:/var/run/php72-fpm.sock;
fastcgi_index  index.php;
#fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name
include        fastcgi_params;
}
Code:
*** /usr/jails/aaaa/var/log/nginx//error.log ***
2018/10/17 14:15:56 [emerg] 64091#100423: invalid number of arguments in "fastcgi_param" directive in /usr/local/etc/nginx/nginx.conf:76
2018/10/17 14:16:04 [error] 82892#100416: *3 open() "/usr/local/etc/nginx/html/info.php" failed (2: No such file or directory), client: 10.49.1.3, server: localhost, request: "GET /info.php HTTP/1.1", host: "127.0.0.1"

*** /usr/jails/aaaa/var/log/nginx//access.log ***
10.49.1.3 - - [17/Oct/2018:14:16:04 +0200] "GET /info.php HTTP/1.1" 404 169 "-" "ELinks/0.11.7 (textmode; FreeBSD 11.2-RELEASE-p4 amd64; 202x33-2)"
 
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name

Dort fehlt wohl ein Semikolon am Ende.
Und bitte nicht die anderen fastcgi_* Anweisungen auskommentieren - das bringt doch nichts.

Lasse fastcgi_param aus dem Location-Block heraus und passe deine Datei fastcgi_params an, sonst wird die Anweisung doch von der Include-Datei wieder zunichte gemacht.

Und warum antwortet auf einmal Mardor? Der OP war doch Palazo!

Rob
 
Hallo Rob,

Dort fehlt wohl ein Semikolon am Ende.
Und bitte nicht die anderen fastcgi_* Anweisungen auskommentieren - das bringt doch nichts.

Lasse fastcgi_param aus dem Location-Block heraus und passe deine Datei fastcgi_params an, sonst wird die Anweisung doch von der Include-Datei wieder zunichte gemacht.
Vielen Dank für die nochmalige Erklärung. Ich hab nach deiner Erklärung verstanden warum ich die Anweisung und nicht den Rest auskommentieren sollte.

Nun erhalte ich im elinks keine Anzeige, aber ich sehe im Log einen Response Code 200. Ich denke das ich nichts sehe liegt an elinks. Ich werden in den nächsten Tag noch pf einrichten um auch einen richtigen Browsertest durchführen zu können. Dann sag ich Bescheid.

Und warum antwortet auf einmal Mardor? Der OP war doch Palazo!
Um wirklich ehrlich zu sein, habe in meiner "Laufbahn" als Mardor so viele dumme Fehler gemacht und habe immer wieder irgendwelche Dinge übersehen (wie beispielsweise in diesem Thread das Semikolon) das ich mich dafür geschämt habe und mir dachte, dass ihr irgendwann denken müsst "ach jetzt schon wieder so ne Frage mit so nem dummen Fehler von dem Typ" (obwohl ihr noch nie etwas dergleichen geschrieben habt) das ich mir einen zusätzlichen Account angelegt habe.

Gruß Mardor
 
Ich werden in den nächsten Tag noch pf einrichten um auch einen richtigen Browsertest durchführen zu können. Dann sag ich Bescheid.
Ich habe den Test vorgezogen und mein pf konfiguriert. Es scheint doch kein Problem mit elinks zu sein. Auch mit meinem Firefox erhalte ich nur eine weise Seite. Die Logdatei zeigt mir allerdings einen Response code 200 im access.log an. Der error log ist leer.

Auch die info.php habe ich nach dem Beispiel unter "https://secure.php.net/manual/de/function.phpinfo.php" erneut erstellt, allerdings mit dem gleichen Resultat.

Gruß Mardor

PS: Ich habe versucht Palazo zu löschen, finde aber die Option zum Löschen in den Einstellungen nicht.
 
Um wirklich ehrlich zu sein, habe in meiner "Laufbahn" als Mardor so viele dumme Fehler gemacht und habe immer wieder irgendwelche Dinge übersehen (wie beispielsweise in diesem Thread das Semikolon) das ich mich dafür geschämt habe und mir dachte, dass ihr irgendwann denken müsst "ach jetzt schon wieder so ne Frage mit so nem dummen Fehler von dem Typ" (obwohl ihr noch nie etwas dergleichen geschrieben habt) das ich mir einen zusätzlichen Account angelegt habe.
Ach weißt du, wir haben alle mal klein angefangen. Einige erfahrene Nutzer in diesem Forum, das schließt mich dann wohl ein, müssen auf die jüngeren Semester fast wie abgehobene Götter wirken, aber zumindest ich war nicht anders. Ich hab damals in den 90ern, lange ist es her, etliche Systeme zerschossen und genauso oft neu installiert. Und viele Stunden Telefonkosten mit einem 56k Modem generiert, um nach Problemlösungen zu suchen...

Das wird übrigens nicht besser. Mit steigender Erfahrung ändert sich nur die Art Fehler, die man macht. Nicht umsonst gibt es die alte Weißheit: "Es sind nie kreative Fehler". Letzten Freitag fiel mir zum Beispiel auf, dass ich auf der Arbeit in meinem Server-Netz DHCP-Antworten bekomme, obwohl da kein DHCP-Server läuft. Recht schnell war klar, dass die aus dem eigentlich komplett getrennten Client-Netz kommen. Ich habe mir stundenlang einen Wolf gesucht, wo ich den Fehler in der VLAN-Konfiguration habe. Bis ich am Ende festgestellt habe, dass ich irgendwann einmal in meinem Moment geistiger Umnachtung zwischen den beiden Switches (einer für jedes Netz) auf meinem Schreibtisch eine Brücke gesteckt hatte. Die dann im Kabelgewirr untergegangen war. Das war nicht dumm, das war schon fast bescheuert...

Also mache dir keine Sorgen. Niemand mit etwas Erfahrung lacht über vermeidlich "dumme" Fehler. Ganz im Gegenteil, man hält besser die Klappe und nickt wissend.

PS: Ich habe versucht Palazo zu löschen, finde aber die Option zum Löschen in den Einstellungen nicht.
Normale Nutzer können ihren Account nicht löschen. Das passiert nur auf Anfrage per Privatnachricht. Du bekommst gleich eine. :)
 
Hi,

Ich habe den Test vorgezogen und mein pf konfiguriert. Es scheint doch kein Problem mit elinks zu sein. Auch mit meinem Firefox erhalte ich nur eine weise Seite.

ich teste sowas immer mit fetch/wget.
Bitte rufe folgendes Kommando auf, um dir die gelieferten Header anzusehen:

Code:
fetch -vvo /dev/null <URL>
Wenn dort oben in den Headern vom Server <<< X-Powered-By: PHP/?.?.? erscheint, ist zumindest PHP für den Inhalt verantwortlich.

Dann solltest du prüfen, warum nur eine weiße Seite erscheint: entweder in der systemweiten /usr/local/etc/php.ini oder im Skriptverzeichnis in der Datei ".user.ini" den Wert display_errors=On setzen. Wenn du die systemweite Konfiguration änderst, musst du den FPM neu starten. Du erhältst dann die Fehler direkt im Browser.
Alternativ log_errors=On setzen und dann im Error-Logfile des nginx nachsehen.

Rob
 
Nginx mit php-fpm ist kein Hexenwerk, @Mardor versuche dich dem Problem schrittweise zu nähern.

In deinem Location Block steht noch eine root Direktive, ich schreibe die immer direkt in den übergeordneten Server Block.

Werden denn einfache html Seiten angezeigt? Nginx liefert default auch txt aus, erstelle dir eine Datei und versuche sie aufzurufen.

Wenn das klappt, liegt es weder am Jail noch an pf. Den gezeigten Fehlern nach, schließe ich das aus.

Sollte es doch nicht gehen, dann poste mal die gesamte Konfig des Hosts, mit dem vollständigen Server Block.

Ich nutze nginx mit php-fpm produktiv in einigen Jails, Fehler passieren mir dabei auch immer mal wieder, aber eigentlich ist das alles kein Problem ;-)
 
Hi,

Hi,
Wenn dort oben in den Headern vom Server <<< X-Powered-By: PHP/?.?.? erscheint, ist zumindest PHP für den Inhalt verantwortlich.

Wenn ich den Aufruf durchführe erhalte ich tatsächlich einen entsprechenden X-Header

Code:
scheme:   "http"
user:     ""
password: ""
host:     "127.0.0.1"
port:     "0"
document: "/info.php"
---> 127.0.0.1:80
resolving server address: 127.0.0.1:80
requesting http://127.0.0.1/info.php
>>> GET /info.php HTTP/1.1
>>> Host: 127.0.0.1
>>> Accept: */*
>>> User-Agent: fetch libfetch/2.0
>>> Connection: close
>>>
<<< HTTP/1.1 200 OK
<<< Server: nginx/1.14.0
<<< Date: Thu, 18 Oct 2018 19:01:03 GMT
<<< Content-Type: text/html; charset=UTF-8
<<< Transfer-Encoding: chunked
<<< Connection: close
<<< X-Powered-By: PHP/7.2.10
<<<
offset 0, length -1, size -1, clength -1
fetch: http://127.0.0.1/info.php: size of remote file is not known
/dev/null                                                0  B    0  Bps<<< 0
http_new_chunk(): end of last chunk
/dev/null

Dann solltest du prüfen, warum nur eine weiße Seite erscheint: entweder in der systemweiten /usr/local/etc/php.ini oder im Skriptverzeichnis in der Datei ".user.ini" den Wert display_errors=On setzen. Wenn du die systemweite Konfiguration änderst, musst du den FPM neu starten. Du erhältst dann die Fehler direkt im Browser.
Alternativ log_errors=On setzen und dann im Error-Logfile des nginx nachsehen.Rob
Ich habe nochmals die developer php.ini als php.ini kopiert. Dort sind sowohl display_errors=On als auch log_errors=On gesetzt. Dann habe ich den kompletten Jail neu gestartet. Ich erhalte weder auf dem Bildschirm, noch im php-fpm.log eine Meldung. Nur den nginx Log zeigt mir eine 200.

Gruß Mardor
 
Nginx mit php-fpm ist kein Hexenwerk, @Mardor versuche dich dem Problem schrittweise zu nähern.

In deinem Location Block steht noch eine root Direktive, ich schreibe die immer direkt in den übergeordneten Server Block.

Ich bin mir nicht sicher ob ich Dich richtig verstehe, aber in der nginx.conf steht die location Anweisung bereits im Server Block
Code:
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   /usr/local/www/nginx;
            index  index.php index.html index.htm;
        }

Werden denn einfache html Seiten angezeigt? Nginx liefert default auch txt aus, erstelle dir eine Datei und versuche sie aufzurufen.
Sagen wir es so, wenn ich Hauptseite aufrufe erhalte ich auf jeden Fall die nginx default page. Das sollte doch dann passen oder ?

Gruß Mardor
 
Ich meinte eigentlich die Root Direktive, nimm die aus dem Location Block raus und schreibe sie in den Server Block.

Index braucht nur einen Wert, falls du das Verhalten vom Apachen benötigst, so dass die Dateien in der Reihenfolge durchprobiert werden, kannst du try_files konfigurieren.

Auf der Website wird's erläutert: https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/

Wenn du einfach mal zum Testen eine Textdatei mit nem * als test.txt in dein angegebenes Root Verzeichnis speicherst, müsste das mit /test.txt als 200 ausgeliefert werden. Kommst du soweit?

Bin gerade nur am Handy, kann dir aber gerne später ne Konfiguration aus einem meiner Jails posten.
 
Eine einfache Nginx Konfig:
NGINX:
# define vHost
server {

  listen       80;
  #listen       443  ssl;
  server_name  www.sld.tld;
  #root         /opt/wwwhome/sld/public;
  root         /usr/local/www/nginx;
  index        index.php;

  #ssl_certificate      cert.d/certs/www.sld.tld.pem;
  #ssl_certificate_key  cert.d/privs/www.sld.tld.pem;

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

  location ~ \.php$ {
    fastcgi_pass   unix:/var/run/php-fpm.socket;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
  }

}
Kannst du eine info.php anlegen und aufrufen?
 
Hi,

leider habe ich es erst jetzt geschafft auf die Antwort zu schauen, ich habe leider die letzten Tage bis sehr spät Abends gearbeitet.

Ich habe meine Konfiguration wie folgt angepasst:

NGINX:
#user  nobody;
worker_processes  1;
#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

            root   /usr/local/www/nginx;
            index  index.php index.html index.htm;

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


  location ~ \.php$ {
    fastcgi_pass   unix:/var/run/php-fpm.socket;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
    }


    }
}

Nach der Änderung bekomme ich sowohl eine angelegte test.txt als auch eine index2.html angezeigt. Ein Aufruf von info.php schaffe ich leider nicht. Hier erhalte ich vom nginx einen 502 Bad Gateway.

Habe ich irgendetwas bei der Konfiguration falsch gemacht ?

Gruß Mardor
 
In deiner "www .conf" (/usr/local/etc/php-fpm.d/www .conf) steht "listen = /var/run/php72-fpm.sock", aber in der conf von nginx steht "unix:/var/run/php-fpm.socket;". Was stimmt nun? Und nicht vergessen "service php-fpm start"

Ansonsten halt mal in die Logs schauen was da so steht.
 
Hi gadean,

danke für den Hinweis, das habe ich komplett übersehen. Danach funktionierte die info.php ohne Probleme.

Ich habe jetzt nochmal die letzte Konfiguration eingespielt um genau die Parameter zu analysieren die falsch waren:

NGINX:
#        location / {
            root   /usr/local/www/nginx;
            index  index.php index.html index.htm;
#        }

Es darf an dieser Stelle keine "location" genutzt werden.

NGINX:
location ~ \.php$ {
#root           html;
fastcgi_pass unix:/var/run/php72-fpm.sock;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
include        fastcgi_params;
}

root darf nicht genutzt werden und der fastcgi_param muss auf $document_root stehen.

Vielen vielen Dank für die tolle Hilfe und die vielen Tipps.


Gruß Mardor

PS: Ich muss mir morgen, wenn ich wieder Aufnahmefähig bin nochmals alles durchlesen. Eventuell würde ich nochmal bei ein paar Parametern nachfragen/nachlesen wenn ich es nicht verstehe.
 
Guten Morgen,

ich habe mir jetzt mehrfach den Hinweis unter https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/ bzgl. location angeschaut. Irgendwie verstehe ich nicht warum folgende Zeile falsch ist und warum alle funktioniert wenn ich "location auskommentiere:

NGINX:
        location / {
            root   /usr/local/www/nginx;
            index  index.php index.html index.htm;
        }

Die Dokument root ist unter /usr/local/www/nginx/ und wenn ich Beispielsweise http://www.xyz.de/ Aufrufe soll er doch die PHP/HTML Dateien unter /usr/local/www/nginx/ anzeigen.

Gruß Mardor
 
Falsch nicht, aber du müsstest dann wohl in jedem "location" Block "root" angeben und wenn dann ein Block nicht matched hat der Aufruf kein "root" - so verstehe ich es zumindest.

Ich würde einfach im "server" Block "root" angeben und bei bedarf in "location" überschreiben.
 
Innerhalb von server brauchst du die root Direktive um dem virtuellen Host sein Document Root zu geben.

Mit root oder alias innerhalb von location kannst du wenn es notwendig wird, Pfade außerhalb des Document Roots erreichen.

Spezifische Verzeichnisse unterhalb vom DocRoot kannst du direkt bei location angeben:
NGINX:
server {
    ...
    # Document Root    des vHost
    root  /usr/www/nginx;
    ...
    location / {
        # Geltungsbereich DocRoot
        ...
    }
    location /public/ {
        # Geltungsbereich /usr/www/nginx/public/
        ...
    }
    location /media/ {
        # Geltungsbereich /opt/example/media/
        # Anfrage /media/logo.png
        # Antwort /opt/example/media/logo.png
        root  /opt/example;
        ...
    }
    location /styles/ {
        # Geltungsbereich /opt/example/ressources/
        # Anfrage /styles/res.css
        # Antwort /opt/example/ressources/res.css
        alias  /opt/example/ressources/;
        ...
    }
}
 
Zurück
Oben