私の開発システムでは、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 がソケット ファイルを作成できるようにします。