erreur de socket de domaine nginx unix

18

J'utilise fedora 17, et lorsque j'installe nginx avec uwsgi en utilisant la socket de domaine unix, quand je place la socket dans un répertoire avec la permission appropriée, c'est ok, mais quand je place la socket dans la, /tmpcela provoquera une erreur nginx:

connect() to unix:/tmp/MySite.sock failed (2: No such file or directory) while connecting to upstream

Le fichier existe et dispose d'une autorisation de lecture / écriture pour l'utilisateur nginx. Mais quelle est la cause de cette erreur, ça me rend vraiment fou, quelqu'un peut-il le comprendre.

jeffgoku
la source

Réponses:

33

Vous ne pouvez pas placer de sockets destinés à la communication interprocessus dans /tmp.

Pour des raisons de sécurité, les versions récentes de Fedora utilisent des répertoires temporaires avec espace de noms , ce qui signifie que chaque service voit un complètement différent /tmpet ne peut voir que ses propres fichiers dans ce répertoire.

Pour résoudre le problème, placez le socket dans un répertoire différent, tel que /run(anciennement appelé /var/run).

Michael Hampton
la source
1
/ run n'est pas accessible en écriture pour un utilisateur régulier
hostmaster
1
/runn'est pas accessible en écriture directement, mais vous pouvez demander à systemd de créer un répertoire en dessous qui sera accessible en écriture par les deux processus.
Michael Hampton
Pour aider ceux qui recherchent, cela s'applique également à centos 7, et le déplacement du dossier socket vers / run a fonctionné. Ce n'est pas facile de trouver ce problème, car chaque compte peut voir le dossier et le fichier dans tmp (définir 777 pour tester), vous ne devinerez donc jamais que les processus ne pourraient pas.
JosephK
0

OUI! CELA A AIDÉ!

Je voyais des messages check-startup-logs d'uwsgi, mais il n'y avait pas de données dans les journaux de démarrage, je n'ai pas pu savoir ce qui se passait. Il s'est avéré que je devais changer le fichier de chaussette en un emplacement non / tmp et ajouter:

catch-exceptions = true

dans le fichier ini du wsgi. s'est avéré, j'avais spécifié l'emplacement du gestionnaire de fichiers de journalisation dans un répertoire inexistant, il ne pouvait donc pas consigner les erreurs en premier lieu.

Kevin J. Rice
la source