I'm trying to get a very simple proxy working with node-http-proxy which I would expect to just return the contents of google:
const http = require('http');
const httpProxy = require('http-proxy');
const targetUrl = 'http://www.google.co.uk';
const proxy = httpProxy.createProxyServer({
target: targetUrl
});
http.createServer(function (req, res) {
proxy.web(req, res);
}).listen(6622);
For example I would expect http://localhost:6622/images/nav_logo242.png to proxy to http://www.google.co.uk/images/nav_logo242.png instead of returning a 404 not found.
Thanks.
Set http-proxy option changeOrigin
to true
and it will set the host
header in the requests automatically.
Vhosted sites rely on this host
header to work correctly.
const proxy = httpProxy.createProxyServer({
target: targetUrl,
changeOrigin: true
});
As an alternative to express-http-proxy, you could try http-proxy-middleware. It has support for https and websockets.
const proxy = require('http-proxy-middleware');
app.use('*', proxy({
target: 'http://www.google.co.uk',
changeOrigin: true,
ws: true
}));
You need to set the Host
header of your request
const http = require('http');
const httpProxy = require('http-proxy');
const targetHost = 'www.google.co.uk';
const proxy = httpProxy.createProxyServer({
target: 'http://' + targetHost
});
http.createServer(function (req, res) {
proxy.web(req, res);
}).listen(6622);
proxy.on('proxyReq', function(proxyReq, req, res, options) {
proxyReq.setHeader('Host', targetHost);
});
Inside an express app it's probably easier to use express-http-proxy when proxying some of the requests.
const proxy = require('express-http-proxy');
app.use('*', proxy('www.google.co.uk', {
forwardPath: function(req, res) {
return url.parse(req.originalUrl).path;
}
}));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With