You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Linux应用服务只读模式下指定Next.js缓存路径?

在Azure Linux应用服务的只读模式下运行Next.js并修改缓存目录

可以实现从只读目录运行Next.js,同时将缓存及运行时写入的内容存储到可写目录(如/tmp),以下是具体解决方案:

1. 区分构建阶段与运行阶段的目录配置

Next.js的构建输出目录(.next)和运行时缓存目录是两个不同的概念,需要分别配置:

针对运行时缓存目录(解决静态属性/页面刷新的写入需求)

Next.js 12及以上版本支持通过环境变量指定运行时缓存目录,这是最直接有效的方式:

  • 在Azure应用服务的「配置 > 应用程序设置」中添加环境变量:
    NEXT_CACHE_DIR=/tmp/next-cache
    
  • 若使用Next.js 13+的App Router,也可在next.config.js中补充缓存配置(可选,与环境变量配合生效):
    module.exports = {
      caching: {
        cacheDirectory: '/tmp/next-cache',
      },
      // 其他配置...
    };
    

针对构建输出目录(若需在Azure上自动构建)

如果你的Next.js应用是通过Azure Oryx自动构建的,由于/home/site/wwwroot是只读的,需要将构建输出指定到/tmp目录:

  • 修改package.json中的build命令:
    "scripts": {
      "build": "next build --dist-dir /tmp/.next",
      "start": "next start --dir /tmp/.next"
    }
    
  • 在Azure应用服务的「配置 > 常规设置」中,将启动命令设置为npm run start(或对应你使用的包管理器命令)。

2. 验证配置生效

部署完成后,可以通过以下方式确认:

  • 查看Azure应用服务的日志,确认Next.js启动时加载的缓存目录为/tmp/next-cache
  • 检查/tmp目录下是否生成了next-cache或.next文件夹,且有写入的文件内容

常见问题说明

  • 你之前设置的dataDir并非Next.js用于缓存或运行时写入的配置项,该配置通常用于特定数据存储场景,因此无法生效。
  • Azure的/tmp目录是临时存储,重启应用服务后会被清空,但Next.js会在重启后重新生成缓存内容,不影响正常运行。

内容的提问来源于stack exchange,提问作者Joshua Graham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:57:12