Auf meinem Entwicklungssystem führe ich eine Flask WSGI-Anwendung mit uwsgi und nginx aus. Auf dem Produktionsserver muss ich jedoch Apache anstelle von nginx verwenden, also versuche ich das. In nginx wird die Site folgendermaßen gemountet:
location /flaskapp { uwsgi_pass unix:/tmp/flaskapp.sock; }
und es funktioniert. In Apache habe ich Folgendes versucht:
ProxyPass /flaskapp unix:/tmp/flaskapp.sock|uwsgi://flaskapp
was mir einen 503-Fehler mit diesem in der Protokolldatei gibt:
[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
Ich habe sowohl das Modul mod_proxy als auch das Modul mod_proxy_uwsgi aktiviert. Ich verstehe das „Keine solche Datei oder kein solches Verzeichnis“-Bit nicht. Die Socket-Datei ist eindeutig dort, wo sie sein soll.
Natürlich habe ich nginx gestoppt und dann Apache neu gestartet, um zu verhindern, dass nginx diesen Socket blockiert.
DerDokumentationder ProxyPass-Direktive erklärt nicht, was der Teil nach dem Pipe-Zeichen („|“) bedeutet, also weiß ich nicht, was ich dort einfügen soll und warum.
Antwort1
Ich hatte ein ähnliches Setup für eine Django-Anwendung und habe diese Fehlermeldung behoben, indem ich den Speicherort der Socket-Datei von /tmp
nach verschoben habe /var/lib/uwsgi
. Stellen Sie sicher, dass es /var/lib/uwsgi
demselben Benutzer und derselben Gruppe gehört, unter denen Ihr Webserver und uWSGI ausgeführt werden, damit uWSGI die Socket-Datei erstellen kann.