Ошибка сокета домена nginx unix

18

Я использую fedora 17, и когда я устанавливаю nginx с помощью uwsgi, используя сокет домена unix, когда я помещаю сокет в каталог с соответствующим разрешением, это нормально, но когда я помещаю сокет в /tmpнего, это вызовет ошибку nginx:

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

Файл существует и имеет права на чтение / запись для пользователя nginx. Но какова причина этой ошибки, она действительно сводит меня с ума, может кто-нибудь понять это.

jeffgoku
источник

Ответы:

33

Вы не можете размещать сокеты, предназначенные для межпроцессного взаимодействия /tmp.

Из соображений безопасности в последних версиях Fedora используются временные каталоги с пространством имен , что означает, что каждый сервис видит совершенно разные /tmpи может видеть только свои файлы в этом каталоге.

Чтобы решить эту проблему, поместите сокет в другой каталог, например /run(ранее известный как /var/run).

Майкл Хэмптон
источник
1
/ run не доступен для записи обычному пользователю
hostmaster
1
/runНепосредственно недоступно для записи, но вы можете указать systemd создать в нем каталог, доступный для записи обоим процессам.
Майкл Хэмптон
Чтобы помочь тем, кто ищет, это также относится к centos 7, и перемещение папки-сокета в / run сработало. Найти эту проблему непросто, потому что каждая учетная запись может видеть папку и файл в tmp (установите 777 для проверки), поэтому вы никогда не догадаетесь, что процессы не смогут.
JosephK
0

ДА! ЭТО ПОМОГЛО!

Просматривал сообщения проверки-запуска-журналов от uwsgi, но не имел данных в журналах запуска, не смог выяснить, что происходит. Оказалось, мне нужно было изменить файл sock в папку, отличную от / tmp, и добавить:

catch-exception = true

в INI-файл WSGI. Оказалось, что я указал местоположение обработчика файлов в несуществующем каталоге, поэтому он не мог сначала регистрировать ошибки.

Кевин Дж. Райс
источник