带有 gunicorn+uvicorn 的 openbsd httpd -- 远程协议错误:非法请求行

Posted

技术标签:

【中文标题】带有 gunicorn+uvicorn 的 openbsd httpd -- 远程协议错误:非法请求行【英文标题】:openbsd httpd with gunicorn+uvicorn -- Remote protocol error : illegal request line 【发布时间】:2022-01-01 07:27:41 【问题描述】:

我的 web 部署设置是在 openBSD 上,前面是 httpd,后面是 guicorn + uvicorn,通过 unix socket 连接。

设置有效,因为来自 httpd 的请求通过 unix 套接字转发到 gunicorn。但是,gunicorn/uvicorn 无法理解传入的 http 请求。 错误堆栈

[2021-11-22 22:52:17 +0530] [1631] [WARNING] Invalid HTTP request received.
Traceback (most recent call last):
  File "/home/shared/Builds/Python-3.10.0/lib/python3.10/site-packages/uvicorn/protocols/http/h11_impl.py", line 136, in handle_events
    event = self.conn.next_event()
  File "/home/shared/Builds/Python-3.10.0/lib/python3.10/site-packages/h11/_connection.py", line 443, in next_event
    exc._reraise_as_remote_protocol_error()
  File "/home/shared/Builds/Python-3.10.0/lib/python3.10/site-packages/h11/_util.py", line 76, in _reraise_as_remote_protocol_error
    raise self
  File "/home/shared/Builds/Python-3.10.0/lib/python3.10/site-packages/h11/_connection.py", line 425, in next_event
    event = self._extract_next_receive_event()
  File "/home/shared/Builds/Python-3.10.0/lib/python3.10/site-packages/h11/_connection.py", line 367, in _extract_next_receive_event
    event = self._reader(self._receive_buffer)
  File "/home/shared/Builds/Python-3.10.0/lib/python3.10/site-packages/h11/_readers.py", line 68, in maybe_read_from_IDLE_client
    raise LocalProtocolError("illegal request line")
h11._util.RemoteProtocolError: illegal request line

我不确定非法请求行的潜在原因是什么。

【问题讨论】:

【参考方案1】:

httpd 不支持 http 代理。 它支持提供静态文件以及FastCGI。和错误信息,表明你的httpd尝试使用FastCGI与gunicorn通信。

因此,如果您坚持使用httpd,请找到一种使用FastCGI 服务器而不是WSGI (gunicorn) 来运行您的应用程序的方法。许多年前,flup 是一个受欢迎的选择。

或者,只使用nginx 而不是httpd

【讨论】:

知道了。谢谢。有一个 uWSGI 连接到 httpd (uwsgi-docs.readthedocs.io/en/latest/OpenBSDhttpd.html) 的文档,我认为这是一个 WSGI,所以我认为 gunicorn 也可以。

以上是关于带有 gunicorn+uvicorn 的 openbsd httpd -- 远程协议错误:非法请求行的主要内容,如果未能解决你的问题,请参考以下文章

FastAPI环境部署

安装gunicorn

AWS上带有nginx和gunicorn的Flask应用程序[重复]

来自带有 Gunicorn 的 Docker 容器的 ModuleNotFoundError

带有 Gunicorn 的 Flask App 在生产中给出错误:套接字挂断

Heroku 上带有 gunicorn 服务器的 Django 项目不提供静态文件