上下文:我有一个简单的Next.js和KeystoneJS应用程序。我在 2 个 AWS EC2 实例上进行了重复部署。每个实例还有一个 Nginx 反向代理路由端口 80 到 3000(我的应用端口)。这 2 个实例也位于应用程序负载均衡器后面。
问题:路由到我的默认 URL 时,我的应用程序会尝试获取 nextjs 应用程序的buildManifest
。然而,大多数时候,这是 404。
我的猜测:由于请求非常接近,因此我的负载均衡器正在将buildManifest
的第二个请求路由到另一个实例。由于我在该实例上进行了单独的yarn build
,因此build ids
是不同的,因此它没有获取正确的构建。此请求 404s 和我的网站已损坏。
我的问题:有没有办法确保从实例A
发出的所有请求都路由到实例A
?或者有没有更好的方法在每个实例上进行构建,以便它们的 ID 相同?这是 Docker 的用例吗?
我的负载均衡器遇到了类似的问题,指定自定义构建 ID 似乎已经解决了它。这是专用问题,这就是我现在next.config.js
的样子:
const execSync = require("child_process").execSync;
const lastCommitCommand = "git rev-parse HEAD";
module.exports = {
async generateBuildId() {
return execSync(lastCommitCommand).toString().trim();
},
};
如果您在 next.config.js 文件中使用自定义构建目录,请将其删除并使用默认构建目录。
喜欢:
distDir: "build">
从 next.config.js 文件中删除上述行。
学分:https://github.com/serverless-nextjs/serverless-next.js/issues/467#issuecomment-726227243