На моей системе разработки я запускаю приложение 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 мог создать файл сокета.