[英]Serve static assets and media separately from meteor with nginx?
來自Django我習慣於與主wsgi或其他應用程序分開提供我的靜態資產和媒體(包括上傳)。 這種平面文件結構易於導航和管理。
我似乎無法找到任何關於如何使用Meteor執行此操作的示例(單獨提供靜態資產/媒體)。
有標准方法嗎?
是否有提供此功能的軟件包?
我的最終目標是:
能夠更直觀地導航所有靜態資產和媒體,並從公共可訪問的URL訪問它們,而無需熱重建流星應用程序。 “public”文件夾不適合我...特別是對於上傳的媒體。
在遷移應用程序時或通過我編寫的自定義應用程序/程序包手動上傳到此系統路徑(與主流星應用程序分開)。
瀏覽/解析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.