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

在Elastic Beanstalk部署SailsJS应用时静态文件404问题求助

SailsJS部署到Elastic Beanstalk后静态文件404的解决方案

我之前也踩过一模一样的坑!按照AWS Node.js教程把Sails应用部署到EB后,页面能正常渲染,但所有css、js、图片全报404,折腾了好一阵才搞定,给你分享几个亲测有效的解决办法:

方法一:用npm start启动并确保静态资源编译&路径配置正确

Sails默认依赖Express的静态中间件托管assets目录下的资源,但在EB环境里,经常因为工作目录、资源未编译或者启动命令不对导致路径识别失败。

  • 先确认package.json的启动脚本正确:
    别用sails lift作为启动命令,EB的Node环境可能没法直接识别全局的sails命令,改成直接启动app.js:

    "scripts": {
      "start": "node app.js",
      "build": "sails build"
    }
    
  • 检查Sails的静态中间件配置:
    打开config/http.js,确保www中间件(负责静态资源托管)在router之前,并且指向正确的编译后目录:

    module.exports.http = {
      middleware: {
        order: [
          'cookieParser',
          'session',
          'bodyParser',
          'compress',
          'poweredBy',
          '$custom',
          'www', // 这个必须在router前面,不然请求先被路由处理了
          'router',
          'favicon',
        ],
        // 指向Sails编译后的静态资源目录
        www: require('serve-static')('.tmp/public'),
      }
    };
    
  • 让EB部署时自动编译静态资源:
    本地开发时我们会手动跑sails build把assets里的资源编译到.tmp/public,但EB部署时默认不会做这一步。创建.ebextensions/01_build_assets.config文件,添加部署前编译命令:

    container_commands:
      01_build:
        command: "npm run build"
    

    这样EB在启动应用前会自动编译静态资源,确保.tmp/public目录下有正确的文件。

方法二:配置EB的Nginx直接托管静态资源

如果第一种方法还是不行,可能是EB的Nginx反向代理没有正确转发静态资源请求。这时候可以直接让Nginx处理静态资源请求,不仅能解决404,还能提升性能。

创建.ebextensions/02_nginx_static.conf文件,添加Nginx配置:

files:
  "/etc/nginx/conf.d/elasticbeanstalk/00_static_files.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      # 匹配静态资源路径,直接指向编译后的目录
      location /css/ {
        alias /var/app/current/.tmp/public/css/;
        expires 30d; # 开启缓存,提升加载速度
      }
      location /js/ {
        alias /var/app/current/.tmp/public/js/;
        expires 30d;
      }
      location /images/ {
        alias /var/app/current/.tmp/public/images/;
        expires 30d;
      }

EB的Node环境默认用Nginx做反向代理,这个配置会让Nginx直接返回静态文件,不用经过Sails/Node进程,彻底解决404问题。

排查小技巧

如果还是有问题,登录EB实例看看日志:

  • 查看Node应用日志:tail -f /var/log/nodejs/nodejs.log,看看有没有静态资源加载的错误信息
  • 查看Nginx访问日志:tail -f /var/log/nginx/access.log,确认请求的路径是不是正确的
  • 检查.tmp/public目录:ls /var/app/current/.tmp/public,看看有没有编译后的静态文件,如果没有,说明sails build执行失败了

我当时用第一种方法就解决了,配合EB的自动编译,静态资源就正常加载了。如果第一种不行,试试第二种Nginx配置,应该能搞定!

内容的提问来源于stack exchange,提问作者Abe Fehr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:12:40