如何在 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; }

并且成功了。在 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

相关内容