在我的开发系统上,我正在使用 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 指令没有解释管道(“|”)字符后面的部分是什么意思,所以我不知道应该放什么以及为什么放在那里。
答案1
我对 Django 应用程序进行了类似的设置,并通过将套接字文件的位置从 移动到 解决了此错误消息。确保属于您的 Web 服务器和 uWSGI 在/tmp
其下运行的同一用户和组,以便 uWSGI 可以创建套接字文件。/var/lib/uwsgi
/var/lib/uwsgi