Apache-2.4

如何在 Apache / mod_proxy_uwsgi 後面使用 UNIX 域套接字?

  • July 7, 2021

在我的開發系統上,我正在使用 uwsgi 和 nginx 執行 Flask WSGI 應用程序。但是在生產伺服器上我需要使用 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 保留該套接字。

ProxyPass 指令的文件沒有解釋管道(“|”)字元後面的部分是什麼意思,所以我不知道該放什麼以及為什麼。

我對 Django 應用程序進行了類似的設置,並通過將套接字文件的位置/tmp/var/lib/uwsgi. 確保它/var/lib/uwsgi屬於您的 Web 伺服器和 uWSGI 執行的同一使用者和組,以便 uWSGI 可以創建套接字文件。

引用自:https://serverfault.com/questions/1048239