Je déteste configurer nginx. C'est très compliqué. Comment faire fonctionner PHP dans mes répertoires utilisateur? 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ésout pas correctement le nom du script. Je déteste devoir dire à nginx où chercher dans mon système de fichiers, en écrivant des expressions rationnelles personnalisées pour ce qui devrait être une fonctionnalité intégrée (ou au moins standardisée et documentée).
/etc/nginx/fastcgi.conf
?Réponses:
Le problème est que dans votre fastcgi.conf vous définissez
SCRIPT_FILENAME
comme$document_root$fastcgi_script_name;
mais vous utilisez ensuite laalias
direcive pour définir le chemin.Vous devez mettre
SCRIPT_FILENAME
à jour votre pour 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 cela car il peut y avoir plusieurs autres causes.
la source
Lorsque vous définissez des redirections, des alias et que vous utilisez fastcgi dans la conf de votre site dans nginx, vous pouvez essayer ceci pour les laisser fonctionner:
Changement:
Dans:
Si cela ne fonctionne pas, essayez d'utiliser comme indiqué ci-dessus sans REQUEST_URI, ce sera donc:
la source
Essayez d'utiliser un
location
bloc distinct pour les scripts PHP dans les répertoires utilisateur. Cela n'a pas besoin d'être imbriqué.la source