web-dev-qa-db-fra.com

nginx fastcgi "script primaire inconnu" lors de la configuration d'userDir

Je déteste la configuration de nginx. C'est très compliqué. Comment puis-je obtenir PHP= pour travailler dans mon utilisateur DIRS? Voici la partie pertinente de mon 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;
        }
    }

Cela me donne l'erreur: FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream Dans le journal des erreurs Nginx.

Voici mon /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;

Je suppose que Nginx ne résolvait pas correctement le nom du script. Je déteste avoir à dire à Nginx où regarder mon système de fichiers, écrire des expulsions personnalisées pour ce qui doit être intégré (ou au moins normalisé et documenté).

10
nnyby

Le problème est que dans votre fastcgi.conf, vous définissez SCRIPT_FILENAME comme $document_root$fastcgi_script_name; Mais vous utilisez ensuite le alias direcatif pour définir le chemin.

Vous devriez mettre à jour votre SCRIPT_FILENAME utiliser $request_filename

Vous pouvez également revenir à l'emplacement imbriqué si vous préférez. Si vous obtenez toujours cette erreur ensuite, j'ai documenté toutes les possibilités ici: http://blog.martinfjordvald.com/2011/01/no-input-file-specified-with-php-and-nginx/

Veuillez vérifier que comme il peut y avoir plusieurs autres causes.

9
Martin Fjordvald

Lorsque vous définissez les redirections, les alias et vous utilisez FastCGI dans la conférence de votre site dans NGinx, vous pouvez essayer cela pour les laisser travailler:

Changer:

lieu ~\.php $ {
...
fastcgi_param script_filename $ document_root $ fastcgi_script_name;
...
}


Dans:

lieu ~\.php $ {
...
fastcgi_param script_filename $ demande_filename;
fastcgi_param demande_uri $ URI? $ args;
...
}

Si cela ne fonctionne pas, essayez d'utiliser comme indiqué ci-dessus sans la demande_uri, ce sera donc:

lieu ~\.php $ {
...
fastcgi_param script_filename $ demande_filename;
...
}

4
Amtriorix

Essayez d'utiliser un bloc distinct location Block pour PHP scripts dans les utilisateurs. Cela n'a pas besoin d'être imbriqué.

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;
}
2
Michael Hampton