Wie verwende ich UNIX-Domänen-Sockets hinter Apache/mod_proxy_uwsgi?

Wie verwende ich UNIX-Domänen-Sockets hinter Apache/mod_proxy_uwsgi?

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 /tmpnach verschoben habe /var/lib/uwsgi. Stellen Sie sicher, dass es /var/lib/uwsgidemselben Benutzer und derselben Gruppe gehört, unter denen Ihr Webserver und uWSGI ausgeführt werden, damit uWSGI die Socket-Datei erstellen kann.

verwandte Informationen