2016-09-16 47 views
0

我在Server1上有一個名爲Sitemap.xml的文件,我想從另一臺服務器Server2寫入此文件。在另一臺服務器的文件上寫入

Server1

Server1上的文件結構:

  • 應用
  • 意見
  • 公共
  • sitemap.xml的
  • app.js

Sitemap可以通過Server1/sitemap因爲我已經在我的快遞文件

app.use('/sitemap', express.static(__dirname + '/sitemap.xml')); 
+0

你能想象如果你能做到這一點嗎?這意味着任何人都可以遠程修改你的文件! 你需要做的是在服務器1上創建一個API,如/ changeSitemap並讓server2調用它 – VirginieLGB

+0

實際上,我不想公開我的後端API,因爲我試圖從服務器1上的Server2修改文件。 – user3811978

+0

那會更糟,如果你能這樣做的話haha 而且你可以隨時檢查是否來自Server2的呼叫! – VirginieLGB

回答

0

你應該保護航線與祕密令牌,以避免暴露在下面使用代碼訪問。希望這會對你有所幫助:

// Server 1 
const fs = require('fs'); 

app.use(function(req, res, next) { 
    var secret = req.headers.hasOwnProperty('authorization') 
    ? req.headers.authorization 
    : false; 

    if (! secret || secret !== 'token [your-secret-token]') { 
    res.status(403).send('Access forbidden'); 
    } 

    // Create write stream to sitemap file 
    var stream = fs.createWriteStream('sitemap.xml'); 

    // Redirect request body to stream which writes to sitemap file 
    req.pipe(stream) 
    .on('end',() => res.send('ok')); 
}); 


// Server 2 

const http = require('http'); 
const fs = require('fs'); 

var stream = fs.createReadStream('new-sitemap.xml'); 

var req = http.request({ 
    host: 'server1', 
    headers: { 
    authorization: 'token [your-secret-token]', 
    }, 
}); 

req.on('response', (res) => { 
    if (res.status === 200) { 
    console.log('File uploaded'); 
    } 
    else { 
    console.error('File not loaded'); 
    } 
}); 

// Write data from file into request body 
stream.pipe(req); 

請注意,令牌應該是最小的32個字符長度足夠強大。不要忘記不時更新它。這也是一個概念。

相關問題