it-swarm.com.de

1 FastCGI in stderr gesendet: "Primäres Skript unbekannt"

Mein erstes Mal mit Nginx, aber ich bin mit Apache und Linux mehr als vertraut. Ich verwende ein vorhandenes Projekt und wenn ich versuche, die index.php zu sehen, bekomme ich eine 404-Datei, die nicht gefunden wurde.

Hier ist der access.log-Eintrag:

2013/06/19 16:23:23 [error] 2216#0: *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", Host: "www.ordercloud.lh"

Und hier ist die Sites verfügbare Datei:

server {
# Listening on port 80 without an IP address is only recommended if you are not running multiple v-hosts
    listen       80;
# Bind to the public IP bound to your domain
#listen 127.0.0.11:80;
# Specify this vhost's domain name
    server_name www.ordercloud.lh;
    root /home/willem/git/console/frontend/www;
    index index.php index.html index.htm;

# Specify log locations for current site
    access_log /var/log/access.log;
    error_log /var/log/error.log warn;

# Typically I create a restrictions.conf file that I then include across all of my vhosts
#include conf.d/restrictions.conf;
# I've included the content of my restrictions.conf in-line for this example

# BEGIN restrictions.conf
# Disable logging for favicon
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

# Disable logging for robots.txt
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
# END restrictions.conf

# Typically I create a yiiframework.conf file that I then include across all of my yii vhosts
#include conf.d/yiiframework.conf;
# I've included the content of my yiiframework.conf in-line for this example

# BEGIN yiiframework.conf
# Block access to protected, framework, and nbproject (artifact from Netbeans)
    location ~ /(protected|framework|nbproject) {
        deny all;
        access_log off;
        log_not_found off;
    }

# Block access to theme-folder views directories
    location ~ /themes/\w+/views {
        deny all;
        access_log off;
        log_not_found off;
    }

# Attempt the uri, uri+/, then fall back to yii's index.php with args included
# Note: old examples use IF statements, which nginx considers evil, this approach is more widely supported
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
# END yiiframework.conf

# Tell browser to cache image files for 24 hours, do not log missing images
# I typically keep this after the yii rules, so that there is no conflict with content served by Yii
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires 24h;
        log_not_found off;
    }

# Block for processing PHP files
# Specifically matches URIs ending in .php
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_intercept_errors on;
# Fix for server variables that behave differently under nginx/php-fpm than typically expected
        #fastcgi_split_path_info ^(.+\.php)(/.+)$;
# Include the standard fastcgi_params file included with nginx
        include fastcgi_params;
        #fastcgi_param  PATH_INFO        $fastcgi_path_info;
        #fastcgi_index index.php;
# Override the SCRIPT_FILENAME variable set by fastcgi_params
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
# Pass to upstream PHP-FPM; This must match whatever you name your upstream connection
        fastcgi_pass 127.0.0.1:9000;

    }
}

Mein /home/willem/git/console ist Eigentum von www-data: www-data (mein Webbenutzer, der PHP usw. ausführt) und ich habe ihm aus Frust 777 Berechtigungen gegeben ...

Kann jemand beraten?

11
We0

Ok, also 3 Dinge, die ich nach einem Tag des Kämpfens gefunden habe

  1. Aus irgendeinem Grund hatte ich bereits etwas auf Port 9000 ausgeführt, also änderte ich Auf 9001
  2. Meine Standard-Website hat meine neue Website abgefangen. Noch einmal verstehe ich nicht, warum dies nicht der Fall sein sollte, aber ich habe die Verknüpfung aufgehoben
  3. Nginx führt den Sym-Link für Sites, die für Site-enabled verfügbar sind, nicht automatisch aus. 

Hoffe, das erspart jemandem Ärger!

Hier ist ein detaillierterer Link zum Serverfehler: https://serverfault.com/questions/517190/nginx-1-fastcgi-sent-in-stderr-primary-script-unknown/517207#517207

5
We0

Diese Nachricht vom fastcgi-Server bedeutet normalerweise, dass der angegebene SCRIPT_FILENAME nicht als Datei in seinem Dateisystem gefunden wurde oder nicht zugänglich war. 

Dateiberechtigungen für /home/willem/git/console/frontend/www/index.php

Ist es 644?

Und/home/willem/git/console/frontend/www /

Ist es 755?

8
Sergey Bogdanov

Falls jemand den gleichen Fehler hatte: In meinem Fall war das Problem die fehlende root-Direktive im Standortblock in nginx.conf. wie im Arch-Wiki erläutert

6
flower_green

"Primäres Skript unbekannt" wird durch SELinux-Sicherheitskontext verursacht.

client bekommt die Antwort 

Datei nicht gefunden.

nginx error.log hat die folgende Fehlermeldung

* 19 FastCGI in stderr gesendet: "Primäres Skript unbekannt", während der Antwortheader aus dem Upstream gelesen wird

Ändern Sie einfach den Sicherheitskontexttyp des Webstammordners in httpd_sys_content_t

chcon -R -t httpd_sys_content_t/var/www/show




Es gibt 3 Benutzer für die Konfiguration von nginx/php-fpm

/etc/nginx/nginx.conf

user nobody nobody;  ### `user-1`, this is the user run nginx woker process
...
include servers/*.conf;

/etc/nginx/servers/www.conf

location ~ \.php$ {
#   fastcgi_pass 127.0.0.1:9000;  # tcp socket
    fastcgi_pass unix:/var/run/php-fpm/fpm-www.sock;  # unix socket
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

/etc/php-fpm.d/www.conf

[www]
user = Apache  ### `user-2`, this is the user run php-fpm pool process
user = Apache

;listen = 127.0.0.1:9000  # tcp socket
listen = /var/run/php-fpm/fpm-www.sock  # unix socket

listen.onwer = nobody  ### `user-3`, this is the user for unix socket, like /var/run/php-fpm/fpm-www.sock
listen.group = nobody  # for tcp socket, these lines can be commented
listen.mode = 0660

Benutzer-1 und Benutzer-2 müssen nicht identisch sein.

Für Unix-Sockets muss Benutzer-1 mit Benutzer-3 identisch sein, da nginx fastcgi_pass über Lese- und Schreibberechtigung für den Unix-Socket verfügen muss.

andernfalls erhält nginx 502 Bad Gateway und nginx error.log hat die folgende Fehlermeldung

* 36 connect () zu unix: /var/run/php-fpm/fpm-www.sock fehlgeschlagen (13: Berechtigung verweigert), während die Verbindung zum Upstream hergestellt wurde

3
PLA

Ich weiß nicht, wie das $ document_root berechnet wird, aber ich habe das Problem gelöst

1
enRaiser