nginx fastcgi "Primäres Skript unbekannt" bei der Konfiguration von userdir

10

Ich hasse es, Nginx zu konfigurieren. Es ist so kompliziert. Wie bringe ich PHP dazu, in meinen Benutzerverzeichnissen zu arbeiten? Hier ist der relevante Teil meiner nginx.conf:

    location ~ ^/~(.+?)(/.*)?$ {
        autoindex on;
        autoindex_exact_size off;
        alias /home/$1/public_html$2;

        location ~ \.php {
            include /etc/nginx/fastcgi.conf;
            fastcgi_intercept_errors on;
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_index index.php;
        }
    }

Dies gibt mir den Fehler: FastCGI sent in stderr: "Primary script unknown" while reading response header from upstreamim Nginx-Fehlerprotokoll.

Hier ist mein /etc/nginx/fastcgi.conf:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
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  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;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

Ich gehe davon aus, dass nginx den Skriptnamen nicht richtig auflöst. Ich hasse es, nginx mitteilen zu müssen, wo in meinem Dateisystem gesucht werden soll, und benutzerdefinierte reguläre Ausdrücke für die integrierte (oder zumindest standardisierte und dokumentierte) Funktionalität zu schreiben.

nnyby
quelle
Wo ist der Rest davon? dh /etc/nginx/fastcgi.conf?
Michael Hampton
@ MichaelHampton Ich habe gerade diese Info hinzugefügt
nnyby

Antworten:

9

Das Problem ist, dass Sie in Ihrer fastcgi.conf SCRIPT_FILENAMEals definieren , $document_root$fastcgi_script_name;aber dann das aliasVerzeichnis verwenden, um den Pfad festzulegen.

Sie sollten Ihre aktualisieren, um SCRIPT_FILENAMEzu verwenden$request_filename

Sie können auch zum verschachtelten Speicherort zurückkehren, wenn Sie dies bevorzugen. Wenn Sie diesen Fehler später immer noch erhalten, habe ich alle Möglichkeiten hier dokumentiert: http://blog.martinfjordvald.com/2011/01/no-input-file-specified-with-php-and-nginx/

Bitte überprüfen Sie dies, da es mehrere andere Ursachen geben kann.

Martin Fjordvald
quelle
4

Wenn Sie Weiterleitungen, Aliase und Fastcgi in der Conf Ihrer Site in Nginx definieren, können Sie dies versuchen, damit sie funktionieren:

Veränderung:

Speicherort ~ \ .php $ {
...
fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name;
...
}


In:

location ~ \ .php $ {
...
fastcgi_param SCRIPT_FILENAME $ request_filename;
fastcgi_param REQUEST_URI $ uri? $ args;
...
}

Wenn dies nicht funktioniert, versuchen Sie, wie oben beschrieben ohne REQUEST_URI zu verwenden.

location ~ \ .php $ {
...
fastcgi_param SCRIPT_FILENAME $ request_filename;
...
}

Amtriorix
quelle
Dies funktionierte für mich in OSX Sierra
Ajaybc
2

Versuchen Sie, einen separaten locationBlock für PHP-Skripte in den Benutzerverzeichnissen zu verwenden. Dies muss nicht verschachtelt sein.

location ~ ^/~([^/]+)/(.+\.php)$ {
    alias /home/$1/public_html/$2;
    include /etc/nginx/fastcgi.conf;
    fastcgi_intercept_errors on;
    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
}
Michael Hampton
quelle
Danke für den Vorschlag! Ich bin jetzt ein bisschen näher dran, bekomme aber immer noch genau den gleichen Fehler.
nnyby