it-swarm.com.de

Debuggen des berühmten - FastCGI in stderr: "Primäres Skript unbekannt" beim Lesen des Antwort-Headers aus dem Upstream

SO hat viele Artikel, die diesen Fehlercode erwähnen:

FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream...

Das bedeutet wahrscheinlich, dass diese Fehlermeldung mehr oder weniger nutzlos ist. 

Die Nachricht sagt uns, dass der FastCGI-Handler aus irgendeinem Grund nicht gefällt, was er gesendet hat. Das Problem ist, dass wir manchmal keine Ahnung haben, was der Grund ist.

Ich wiederhole die Frage - wie können wir diesen Fehlercode debug?

Betrachten Sie die Situation, in der wir eine sehr einfache Site haben, nur mit der Datei phpinfo.php. Zusätzlich gibt es eine sehr einfache Nginx-Konfiguration wie folgt:

server {
    server_name testsite.local;

    root /var/local/mysite/;

    location / {
        index index.html index.htm index.php;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass  fastcgi_backend;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

Wie können wir ausgeben/protokollieren, was fastcgi_params an das Skript gesendet wurde?

Wie sehen wir die eigentliche Fehlermeldung? In meinem Fall verwende ich PHP-Fpm. Es enthält keine Informationen zu diesem Fehler im Protokoll. Die Protokolle fügen für diesen Fehler keine Zeilen an. Gibt es einen ausführlichen Modus für PHP-Fpm?

/var/log/php-fpm/error.log
/var/log/php-fpm/www-error.log

Ich habe versucht, dies in der Datei php-fpm.conf einzustellen

log_level = notice

und dies in der Datei php-fpm.d/www.conf:

catch_workers_output = yes
24
010110110101

Zur Beantwortung Ihrer Frage:

  1. in der Datei php-fpm.d/www.conf:

legen Sie den access.log-Eintrag fest:

access.log = /var/log/$pool.access.log
  1. starten Sie den PHP-Fpm-Dienst neu.

  2. versuchen Sie, auf Ihre Seite zuzugreifen

  3. cat /var/log/www.access.log, sehen Sie Zugriffsprotokolle wie:

- - 10/Nov/2016:19:02:11 +0000 "GET /app.php" 404 - - 10/Nov/2016:19:02:37 +0000 "GET /app.php" 404

So lösen Sie das Problem "Primäres Skript unbekannt":

  • wenn Sie "GET /" ohne korrekten PHP-Dateinamen sehen, ist dies Ihr Nginx-Conf-Problem.

  • wenn Sie "GET /app.php" mit 404 sehen, bedeutet dies, dass nginx den Namen der Skriptdatei korrekt übergibt, aber php-fpm konnte nicht auf diese Datei zugreifen (Benutzer "php-fpm: php-fpm") hat keinen Zugriff auf Ihre Datei, die mich für 3 Stunden gefangen hat)

Hoffe, meine Antwort hilft.

45
Shengjie YU

Überprüfen Sie die Position von root und auch das Vorhandensein der Datei. Ich habe diesen Fehler aufgrund des Root-Pfads TYPO festgestellt.

0
herbertD

Für MacOs Benutzer, falls jemand wie in meiner Situation angetroffen ist:

Ich hatte PHP-Service gestartet mit:

Sudo brew start php72

da ich "sudo" verwendet habe waren die berechtigungen unterschiedlich. Ich musste den PHP-Dienst ohne Sudo anhalten und starten.

Sudo brew stop php72
brew start php72

Hoffnung hilft jemandem.

0
İsmail Atkurt