Apache / mod_proxy_uwsgi の背後で UNIX ドメイン ソケットを使用するにはどうすればよいでしょうか?

Apache / mod_proxy_uwsgi の背後で UNIX ドメイン ソケットを使用するにはどうすればよいでしょうか?

私の開発システムでは、uwsgi と nginx を使って Flask WSGI アプリケーションを実行しています。ただし、運用サーバーでは nginx ではなく Apache を使用する必要があるため、それを実行しようとしています。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 がそのソケットを保持し続けるのを防ぐために、nginx を停止して Apache を再起動しました。

ドキュメンテーションProxyPass ディレクティブでは、パイプ ("|") 文字の後の部分が何を意味するのか説明されていないため、そこに何を置くべきか、またその理由がわかりません。

答え1

私は Django アプリケーションに同様の設定をしましたが、ソケット ファイルの場所を から に移動することでこのエラー メッセージを解決しました/tmp。 が、Web サーバーと uWSGI が実行されるのと同じユーザーとグループによって所有されている/var/lib/uwsgiことを確認し/var/lib/uwsgi、uWSGI がソケット ファイルを作成できるようにします。

関連情報