Błąd gniazda domeny nginx unix

18

Korzystam z Fedory 17, a kiedy instaluję nginx z uwsgi przy użyciu gniazda domeny unix, kiedy umieszczam gniazdo w katalogu z odpowiednim uprawnieniem, jest w porządku, ale kiedy umieszczę gniazdo w /tmpnim, spowoduje błąd nginx:

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

Plik istnieje i ma uprawnienia do odczytu / zapisu dla użytkownika nginx. Ale co powoduje ten błąd, to naprawdę doprowadza mnie do szału, może ktoś to wymyśli.

jeffgoku
źródło

Odpowiedzi:

33

Nie można umieszczać gniazd przeznaczonych do komunikacji międzyprocesowej /tmp.

Ze względów bezpieczeństwa najnowsze wersje Fedory używają katalogów tymczasowych z przestrzenią nazw , co oznacza, że ​​każda usługa widzi zupełnie inną /tmpi może zobaczyć tylko własne pliki w tym katalogu.

Aby rozwiązać problem, umieść gniazdo w innym katalogu, na przykład /run(dawniej znany jako /var/run).

Michael Hampton
źródło
1
/ run nie jest jednak zapisywalny dla zwykłego użytkownika
hostmaster
1
/runnie jest bezpośrednio zapisywalny, ale możesz polecić systemd, aby utworzył w nim katalog, który będzie zapisywalny przez oba procesy.
Michael Hampton
Aby pomóc szukającym, dotyczy to również centos 7, a przeniesienie folderu z gniazdem do / run działało. Znalezienie tego problemu nie jest łatwe, ponieważ każde konto widzi folder i plik w tmp (ustaw 777 na test), więc nigdy nie zgadniesz, że procesy nie mogą.
JosephK
0

TAK! TO POMÓC!

Widziałem komunikaty check-startup-log z uwsgi, ale nie miałem danych w logach startowych, nie byłem w stanie dowiedzieć się, co się dzieje. Okazało się, że musiałem zmienić plik skarpety na lokalizację inną niż / tmp i dodać:

catch-wyjątki = prawda

do pliku ini wsgi. okazało się, że podałem lokalizację rejestrowania modułu obsługi plików w nieistniejącym katalogu, więc nie mógł on przede wszystkim zarejestrować błędów.

Kevin J. Rice
źródło