1 votes

nginx - problème intéressant de permissions linux

J'aimerais obtenir des réponses ou des suggestions pour résoudre mon problème.
Je reçois donc une simple erreur :

2014/02/16 12:01:43 [error] 7384#0 : *1 FastCGI envoyé dans stderr : "Primary script unknown" pendant la lecture de l'en-tête de réponse depuis upstream, client : 127.0.0.1, serveur : localhost, requête : "GET / HTTP/1.1", amont : "fastcgi://unix:/var/run/php-fpm.sock :", host : "localhost"

Tout d'abord, ma configuration de nginx est bien faite (pour moi - c'est-à-dire qu'elle fonctionne bien). Le seul problème que j'ai est celui des permissions linux sur les fichiers/dossiers. Je n'arrive pas à comprendre la situation dans laquelle je me trouve. Ok, voici donc quelques informations nécessaires :

  • mon nginx fonctionne bien, avec PHP et mysql configurés.
  • un utilisateur utilisé pour nginx est nommé " nginx "
  • index index.php index.html index.htm (configuration de nginx pour la directive index)

Voici mon problème :

J'ai un arbre comme ça : /home/user/

home dir est : racine:racine con 755
Le répertoire de l'utilisateur est : utilisateur:utilisateur con 700

J'ai créé un fichier nommé index.php en /home/user/index.php . Nginx dit (/var/log/nginx/error.log) que je n'ai pas de permissions. Ok, j'ai fait " usermod -a nginx -G utilisateur "et changé les permissions pour " utilisateur " dir à : 750 (donc maintenant nginx appartient au groupe de l'utilisateur, et peut lire ou exécuter le contenu du répertoire de l'utilisateur). Ok, cela fonctionne mais pas à 100%. Si je crée maintenant un fichier index.html ou index.htm - nginx fonctionne dans un navigateur ! wow ! ouais maintenant je veux créer index.php pour écrire du code. Boom ! Le fichier n'a pas été trouvé. Hmmm, c'est vraiment intéressant pour moi, qu'est-ce que j'ai fait de mal ? Le fait intéressant est que, si je change les permissions du répertoire de l'utilisateur en : 755 (de 750 ), nginx voit index.php . Si je comprends bien, nginx passe d'abord par le " o Les permissions " en /home dir ( r-x ). Ensuite, il doit aller dans " utilisateur "et comme l'utilisateur de nginx fait partie du groupe des utilisateurs, nginx peut passer à l'étape suivante en utilisant " g permissions " ( utilisateur/ dir permissions) pour entrer. Mais ce qui fait que nginx ne peut pas voir index.php (et voit index.html et .htm) ?

Ok, peut-être que mes connaissances ont des failles, mais je dois demander, pourquoi cela arrive-t-il ?

0 votes

Cela ne m'est jamais arrivé. J'ai dans nginx.conf : user www-data; Le propriétaire du fichier est MyNonRootUser et le groupe est www-data, tout fonctionne bien. Cependant, je vous suggère d'utiliser ip sock au lieu de php-fpm.sock :)

0 votes

Votre message d'erreur n'est pas un problème de permissions . Affichez votre server bloc.

0 votes

@WigglerJtag un socket UNIX est plus sûr et plus rapide que n'importe quel socket IP.

0voto

Andrew Bettison Points 231

Eh bien, la question est de savoir quelles sont les permissions de vos fichiers ?

Comme vous exécutez le php en tant que cgi, il a probablement besoin de a +x pour le groupe sur les fichiers .php, ce qu'il n'a probablement pas dans le cas normal. Et il n'a pas besoin de cela pour afficher le .html, qui est évidemment seulement lu, pas exécuté.

0voto

Fleshgrinder Points 3558

Je voulais répondre sur Stackoverflow, mais votre question a été fermée trop rapidement, je suis content que vous l'ayez déplacée ici.

Primary script unknown est signalé par php-fpm et est presque toujours un problème avec le chemin que vous passez (de nginx) à php-fpm. Le processus ne peut tout simplement pas trouver de fichier PHP à cet emplacement. Dans votre cas, il ne peut pas trouver le fichier parce que le processus php-fpm n'a pas les droits d'accès à l'emplacement suivant lire le dossier. C'est vrai, vous n'avez besoin d'aucune autorisation d'exécution pour un script PHP (sauf si c'est un point d'entrée CLI). La raison en est simple, les script PHP ne sont pas exécutés, ils sont analysés (lus).

C'est généralement une bonne idée d'utiliser le même utilisateur/groupe pour nginx, PHP et php-fpm s'il s'agit de votre serveur et que personne d'autre ne s'en mêle. Ensuite, appliquez les permissions suivantes (en supposant que /var/www comme racine pour tous les sites web, ce qui est la meilleure pratique, selon moi) :

# Fix user and group for all directories and files.
$ chown -R www-data:www-data /var/www

# Fix directory permissions (incl. sticky bit for group).
$ find /var/www -type d -exec chmod 2770 {} \;

# Fix file permissions (incl. sticky bit for group).
$ find /var/www -type f -exec chmod 2660 {} \;

Maintenant, tout devrait être parfait pour tout ce que vous exécutez avec nginx, PHP, et php-fpm et c'est ci-dessous /var/www .

0voto

cody osieczonek Points 21

Essayez de changer les permissions du répertoire à partir duquel vous servez vos fichiers en drwx--x--x (c'est-à-dire 711). De cette façon, le serveur web sera en mesure de "cd" vers ce répertoire et de lire le fichier php (à condition qu'il ait les droits de lecture sur celui-ci).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X