首页 文章

使用nginx与流星分开服务静态资产和媒体?

提问于
浏览
13

来自Django我习惯于与主wsgi或其他应用程序分开提供我的静态资产和媒体(包括上传) . 这种平面文件结构易于导航和管理 .

我似乎无法找到任何有关如何使用Meteor执行此操作的示例(单独提供静态资产/媒体) .

  • 有标准方法吗?

  • 是否有提供此功能的软件包?

我的最终目标是:

  • 能够更直观地导航所有静态资产和媒体,并从公共可访问的URL访问它们,而无需热重建流星应用程序 . “public”文件夹不适合我...特别是对于上传的媒体 .

  • 在迁移应用程序时或通过我编写的自定义应用程序/程序包手动上传到此系统路径(与主流星应用程序分开) .

  • 浏览/解析meteor app / package的路径

4 回答

  • 3

    如果所有静态资产都有一个公共路径,例如 /static/... ,那么您可以通过一个目录告诉 nginx 对该路径的alias个请求

    location /static  {
        alias /path/to/static/assets;
    }
    
  • 1

    您可以在流星应用程序中设置一个文件服务器,使用节点 fs 模块为它们提供服务,然后使用Picker之类的服务器,或者如果不能解决问题,可以在Meteor here中添加连接处理程序 .

    默认情况下,Meteor会忽略隐藏目录,因此如果您需要 .assets/ 之类的内容,可以将资源放在app目录中,否则运行meteor的用户可以访问文件系统的任何位置 .

    这里's a working server for text files that I just threw together. You' ll需要先做 meteor add meteorhacks:picker

    if (Meteor.isServer) {
      var fs = Npm.require('fs');
      Picker.route('/asset/:name', function(params, req, res) {
        fs.readFile('/home/users/someuser/media/' + params.name, function(err, file) {
          res.writeHead(200, {'Content-Type': 'text/plain'});
          res.end(file.toString());
        });
      });
    }
    
  • 3

    如果出于性能和可伸缩性的原因(请参阅我的评论),您可能需要使用高速缓存代理 . 最初,代理将直接从Meteor应用程序获取静态文件,但后续请求将从其缓存中提供 .

    本文(nginx-caching)是关于如何使用Nginx设置缓存代理的一个很好的读物 . 此外,Meteorpedia还有一个article解释如何设置专为Meteor应用程序量身定制的Nginx缓存 .

  • 10

    假设您的meteor应用程序位于 /www/meteor ,并且您希望从 /meteor 树之外的目录提供静态资源,以便文件添加/更改/删除不会导致应用程序重新启动,例如 /www/static

    因此,首先在nginx中定义您的Meteor路径,然后为静态路径定义不同的根,例如:

    location /static {
      root /www/static;
    }
    

    documentation

相关问题