ECONNRESET / 502 在反向代理后面使用 Nuxt 3 时出现错误网关

问题描述 投票:0回答:1

我对 Nuxt 3 应用程序使用 Caddy 反向代理。在开发模式下加载站点时,由于 Vite 使用原生 ESM 提供了较短的预热时间和快速的 HMR(热模块重新加载),因此将加载数百个文件。通过本地主机访问站点时这不是问题。但是当通过反向代理时,经过几百个文件后,它崩溃了。浏览器将看到 502(Bad Gateway),Nuxt 将在终端中报告:

 ERROR  [unhandledRejection] connect ECONNRESET 127.0.0.1:64927                                                                                                                                                                                                                                                                                                                                                                                                                         3:41:34 PM

  at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1611:16) (repeated 9 times)

在生产模式下使用 Nuxt 应用程序时不会发生这种情况 (

nuxt build + nuxt start
),可能是因为文件当时是捆绑的。奇怪的是,当使用 Nginx 作为反向代理时,也会出现同样的问题。

nginx nuxt.js vite nuxt3.js caddy
1个回答
0
投票

花了很长时间才弄清楚这一点。显然,Nuxt(或 Vite / Nitro.js / Node 或任何提供实际 HTTP 服务器的东西)仅提供 HTTP 1.1。默认情况下,Caddy 或 Nginx 的反向代理将使用 HTTP 2。我不太确定为什么这是一个问题,但这是我的理论:HTTP 1.1 限制了大约 8 个并发请求。由于 HTTP 2 的工作方式不同,因此它没有该限制。因此,反向代理几乎会立即在 Nuxt 服务器上转储大量请求。这些超时时间很短,最终会导致连接中断。

解决方案是在全局选项中指示 Caddy 使用 HTTP 1(这在开发环境中不是问题):

{
        servers {
                protocols h1
        }
}

请参阅:https://caddyserver.com/docs/caddyfile/options#protocol

© www.soinside.com 2019 - 2024. All rights reserved.