#api #redirect #node.js #proxy #last.fm
#API #перенаправление #node.js #прокси #last.fm
Вопрос:
Я пытаюсь использовать Node.js чтобы настроить прокси для Last.fm веб-сервисы. Проблема в том, что каждый запрос к ws.audioscrobbler.com переписывается на www.last.fm . Так, например, $ curl http://localhost:8000/_api/test123
отправляет 301 Moved Permanently
на http://www.last.fm/test123
.
var express = require('express'),
httpProxy = require('http-proxy');
// proxy server
var lastfmProxy = httpProxy.createServer(80, 'ws.audioscrobbler.com');
// target server
var app = express.createServer();
app.configure(function() {
app.use('/_api', lastfmProxy);
});
app.listen(8000);
В то же время $ curl http://ws.audioscrobbler.com/test123
возвращает обычный 404 Not Found
. Я не совсем уверен, чего мне здесь не хватает, или я подхожу к этому совершенно неправильно.
Ответ №1:
Причина, по которой вы получаете 301 Moved Permanently
, заключается в том, что ws.audioscrobbler.com получает HTTP-запрос с именем хоста «localhost».
Одно из решений — позволить прокси переписать имя хоста на «ws.audioscrobbler.com » перед передачей его на удаленный сервер:
var httpProxy = require('http-proxy');
var lastfmProxy = httpProxy.createServer(function (req, res, proxy) {
req.headers.host = 'ws.audioscrobbler.com';
proxy.proxyRequest(req, res, {
host: 'ws.audioscrobbler.com',
port: 80,
});
}).listen(8000);