Как использовать доменные сокеты UNIX за Apache / mod_proxy_uwsgi?

Как использовать доменные сокеты UNIX за Apache / mod_proxy_uwsgi?

На моей системе разработки я запускаю приложение Flask WSGI с uwsgi и nginx. Однако на производственном сервере мне нужно использовать Apache вместо nginx, поэтому я пытаюсь это сделать. В nginx сайт монтируется так:

location /flaskapp { uwsgi_pass unix:/tmp/flaskapp.sock; }

и это работает. В Apache я попробовал это:

 ProxyPass /flaskapp unix:/tmp/flaskapp.sock|uwsgi://flaskapp

что дает мне ошибку 503 со следующим текстом в файле журнала:

[Fri Jan 01 13:19:45.551524 2021] [proxy:error] [pid 14167] (2)No such file or directory: AH02454: uwsgi: attempt to connect to Unix domain socket /tmp/flaskapp.sock (flaskapp) failed
[Fri Jan 01 13:19:45.551802 2021] [:error] [pid 14167] [client ::1:48950] AH10101: failed to make connection to backend: httpd-UDS:0

Я включил модули mod_proxy и mod_proxy_uwsgi. Я не понимаю бит "нет такого файла или каталога". Файл сокета явно там, где ему и положено быть.

Конечно, я остановил nginx, а затем перезапустил Apache, чтобы nginx не удерживал этот сокет.

Theдокументациядирективы ProxyPass не поясняет, что означает часть после символа вертикальной черты («|»), поэтому я не знаю, что туда вставлять и почему.

решение1

У меня была похожая настройка для приложения Django, и я решил это сообщение об ошибке, переместив местоположение файла сокета из /tmpв /var/lib/uwsgi. Убедитесь, что /var/lib/uwsgiон принадлежит тому же пользователю и группе, под которыми работают ваш веб-сервер и uWSGI, чтобы uWSGI мог создать файл сокета.

Связанный контент