Nginx Unix Domain Socket Fehler

18

Ich benutze Fedora 17, und wenn ich ein Setup nginx mit uwsgi Unix - Domain - Socket verwenden, wenn ich die Buchse in einem Verzeichnis mit dem richtigen Erlaubnis ok es platzieren, aber wenn ich die Steckdose an der Stelle , /tmpwird es Nginx Fehler verursachen:

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

Die Datei existiert und hat Lese- / Schreibrechte für Nginx-Benutzer. Aber was diesen Fehler verursacht, macht mich wirklich verrückt, kann jemand herausfinden.

Jeffgoku
quelle

Antworten:

33

Sie können keine Sockets für die Interprozesskommunikation in platzieren /tmp.

Aus Sicherheitsgründen verwenden neuere Versionen von Fedora temporäre Verzeichnisse mit Namespace. Dies bedeutet, dass jeder Dienst ein völlig anderes Verzeichnis sieht /tmpund nur seine eigenen Dateien in diesem Verzeichnis sehen kann.

Um das Problem zu beheben, platzieren Sie den Socket in einem anderen Verzeichnis, z. B. /run(früher bekannt als /var/run).

Michael Hampton
quelle
1
/ run ist jedoch für einen normalen Benutzer nicht beschreibbar
Hostmaster
1
/runist nicht direkt beschreibbar, aber Sie können systemd anweisen, ein Verzeichnis darunter zu erstellen, das von beiden Prozessen beschreibbar ist.
Michael Hampton
Um die Suche zu erleichtern, gilt dies auch für centos 7 und das Verschieben des Socket-Ordners nach / run hat funktioniert. Es ist nicht einfach, dieses Problem zu finden, da jeder Account den Ordner und die Datei in tmp sehen kann (setzen Sie 777 auf test), sodass Sie niemals vermuten würden, dass Prozesse dies nicht können.
JosephK
0

JA! Dies half!

Wurden Check-Startup-Logs-Meldungen von uwsgi angezeigt, die jedoch keine Daten in den Startup-Logs enthielten, konnte nicht herausfinden, was passierte. Es stellte sich heraus, dass ich die SOCK-Datei in einen Nicht-TMP-Speicherort ändern und Folgendes hinzufügen musste:

catch-exceptions = true

in die Ini-Datei von wsgi. Es stellte sich heraus, dass ich den Speicherort für die Protokollierung des Dateihandlers in einem nicht vorhandenen Verzeichnis angegeben hatte, sodass die Fehler nicht protokolliert werden konnten.

Kevin J. Rice
quelle