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é).
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.
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;
...
}
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;
}