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

时间:2015-10-01 05:08:42

标签: javascript node.js meteor nginx

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

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

  1. 是否有标准方法?

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

  3. 我的最终目标是:

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

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

    3. 浏览/解析来自meteor app / package的路径

4 个答案:

答案 0 :(得分:10)

如果所有静态资源都有一个公共路径,例如.ToList<dynamic>(),那么您可以使用目录告诉/static/...对该路径的alias个请求

nginx

答案 1 :(得分:3)

您可以在meteor应用程序中设置一个文件服务器,使用节点fs模块为其提供服务,然后使用类似Picker的服务或者添加连接处理程序的示例流星here如果没有成功的话。

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

这里是我刚刚汇总的文本文件的工作服务器。您首先需要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());
    });
  });
}

答案 2 :(得分:3)

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

这篇文章(nginx-caching)很好地介绍了如何使用Nginx设置缓存代理。此外,Meteorpedia还有article解释如何设置专为Meteor应用程序量身定制的Nginx缓存。

答案 3 :(得分:1)

我们假设您的meteor应用程序位于/www/meteor,并且您希望从/meteor树之外的目录中提供静态资源,以便该文件添加/更改/删除don&#39 ; t导致应用重启,例如/www/static

首先通常在nginx中定义Meteor路径,然后为静态路径定义不同的 root ,例如:

location /static {
  root /www/static;
}

documentation