簡體   English   中英

使用nginx與流星分開服務靜態資產和媒體?

[英]Serve static assets and media separately from meteor with nginx?

來自Django我習慣於與主wsgi或其他應用程序分開提供我的靜態資產和媒體(包括上傳)。 這種平面文件結構易於導航和管理。

我似乎無法找到任何關於如何使用Meteor執行此操作的示例(單獨提供靜態資產/媒體)。

  1. 有標准方法嗎?

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

我的最終目標是:

  1. 能夠更直觀地導航所有靜態資產和媒體,並從公共可訪問的URL訪問它們,而無需熱重建流星應用程序。 “public”文件夾不適合我...特別是對於上傳的媒體。

  2. 在遷移應用程序時或通過我編寫的自定義應用程序/程序包手動上傳到此系統路徑(與主流星應用程序分開)。

  3. 瀏覽/解析meteor app / package的路徑

如果所有靜態資產都有一個公共路徑,例如/static/... ,那么你可以通過一個目錄告訴nginx alias請求到該路徑

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

您可以在meteor應用程序中設置一個文件服務器,使用節點fs模塊為它們提供服務,然后使用像Picker這樣的服務器,或者如果不能解決問題,可以在這里添加連接處理程序到Meteor。

默認情況下,Meteor會忽略隱藏目錄,因此如果您想要類似.assets/ ,可以將資源放在app目錄中,否則運行meteor的用戶可以訪問文件系統的任何位置。

這是我剛剛匯總的文本文件的工作服務器。 你需要做meteor add meteorhacks:picker first:

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());
    });
  });
}

如果出於性能和可伸縮性的原因(請參閱我的評論),您可能需要使用高速緩存代理。 最初,代理將直接從Meteor應用程序獲取靜態文件,但后續請求將從其緩存中提供。

本文( nginx-caching )是關於如何使用Nginx設置緩存代理的一個很好的讀物。 此外,Meteorpedia還有一篇文章解釋了如何設置專為Meteor應用程序量身定制的Nginx緩存。

假設您的meteor應用程序位於/www/meteor並且您希望從/meteor樹之外的目錄提供靜態資源,以便添加/更改/刪除文件不會導致應用程序重新啟動,例如/www/static

因此,首先在nginx中定義您的Meteor路徑,然后為靜態路徑定義不同的 ,例如:

location /static {
  root /www/static;
}

文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM