Я использую 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