Назад | Перейти на главную страницу

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

Я использую 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. Но в чем причина этой ошибки, это действительно сводит меня с ума, может кто-нибудь разобраться.

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

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

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

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

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

catch-exceptions = правда

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

В основном проблема возникает с ОДНИМ процессом настройки носка в / tmp путь, но он не будет виден ДРУГИМ процессом.

В конфигурации службы есть параметр, который блокирует файлы, созданные другим процессом, даже если используется один и тот же пользователь.

Найдите файл конфигурации службы (например: /etc/systemd/system/myapp.service), а затем добавьте этот параметр: PrivateTmp = Нет к вашим услугам.

[Service]
...
PrivateTmp=No

подробнее о юнитах systemd здесь:

https://www.freedesktop.org/software/systemd/man/systemd.unit.html