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

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

在我的開發系統上,我正在使用 uwsgi 和 nginx 運行 Flask WSGI 應用程式。但是在生產伺服器上我需要使用 Apache 而不是 nginx,所以我正在嘗試這樣做。在 nginx 中,站台的安裝方式如下:

location /flaskapp { uwsgi_pass unix:/tmp/flaskapp.sock; }

它有效。在阿帕奇我嘗試過這個:

 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 指令的 沒有解釋管道(“|”)字元後面的部分的含義,所以我不知道要放在那裡以及為什麼。

答案1

我對 Django 應用程式進行了類似的設置,並透過將套接字檔案的位置從 移動/tmp到來解決此錯誤訊息/var/lib/uwsgi。確保它/var/lib/uwsgi由您的Web伺服器和uWSGI運作所在的相同使用者和群組擁有,以便uWSGI可以建立套接字檔案。

相關內容