megutech

自身の備忘録として主にWEBサーバー周りの技術について投稿しています。

Next.jsでBOTからのアクセス時に500になる

本番稼働中のNext.js アプリケーションのログを眺めていると、稀にエラーを吐いていました。

環境

Key Val
Node.js 20.9.0
Next.js 13.4.13

エラーの内容

- error Failed to handle request for /
TypeError: fetch failed
    at Object.fetch (node:internal/deps/undici/undici:11372:11)
    at async invokeRequest (/var/www/app/sample-app/node_modules/next/dist/server/lib/server-ipc/invoke-request.js:21:12)
    at async requestHandler (/var/www/app/sample-app/node_modules/next/dist/server/lib/start-server.js:336:33)
    at async Server.<anonymous> (/var/www/app/sample-app/node_modules/next/dist/server/lib/start-server.js:152:13) {
  cause: _RequestContentLengthMismatchError: Request body length does not match content-length header
      at write (node:internal/deps/undici/undici:8302:41)
      at _resume (node:internal/deps/undici/undici:8276:33)
      at resume (node:internal/deps/undici/undici:8173:7)
      at connect (node:internal/deps/undici/undici:8162:7) {
    code: 'UND_ERR_REQ_CONTENT_LENGTH_MISMATCH'
  }
}

原因

UND_ERR_REQ_CONTENT_LENGTH_MISMATCHググると、お有難いことに下記記事がヒットしました。
本当にありがとうございます。

本番環境でだけ発生するundiciのエラー

※Version 13.4.13時点 本番環境で以下のようなエラーが発生することがある

さて、今回の環境を見てみましょう。

Next.js 13.4.13ですね!!! まさに引用元のバージョンでした。

これにより、OGPを取得しに来たBOTのアクセス時にエラーが発生していたようです。
この影響でOGPが表示されていませんでした。

対応

NextJS fails with UND_ERR_REQ_CONTENT_LENGTH_MISMATCH after redirect from server

I was experiencing a similar issue. Upgrading to the latest version of NEXT helped resolve it for me. Version 13.4.19 as of this comment.

対応方法についてもお有難いことに既に試している方がいました。
13.4.19では直っているそうです。

ということでnextのバージョンを上げて終了です。