-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsetup.js
More file actions
51 lines (41 loc) · 1.46 KB
/
setup.js
File metadata and controls
51 lines (41 loc) · 1.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// Copyright Samuel I. Olugbemi 2019. All Rights Reserved.
// Node module: node-reverse-proxy
// This file is licensed under the MIT License.
// License text available at https://opensource.org/licenses/MIT
const http = require('http');
const Url = require('url');
const HttpProxyAgent = require('http-proxy-agent');
const Request = require('request');
// HTTP/HTTPS proxy to connect to
const proxy = process.env.PROXY_SERVER_URL
// HTTP endpoint for the proxy to connect to
const endpoint = process.env.UPSTREAM_SERVER_BASE_URL
const request = Request.defaults({
proxy: proxy,
rejectUnauthorized: false
})
const restriction = process.env.RESTRICTED_TO
const RequestProcessor = function (req, resp) {
const originatingIp = req.connection.remoteAddress
req.headers['X-Forwarded-For'] = originatingIp
console.log(`Processing request for client: ${JSON.stringify(originatingIp)}`)
if (_isForward(req)) {
ForwardRequest(req, resp)
} else {
resp.end('ok')
}
}
function ForwardRequest(originRequest, originResponse) {
const url = `${endpoint}${originRequest.url}`
originRequest.pipe(request({
url: url
}).on('response', function (res) {
console.log('"response" event!', res.headers);
originResponse.writeHead(res.statusCode, res.headers);
res.pipe(originResponse);
}));
}
function _isForward(request) {
return (!restriction || request.url.includes(restriction)) && request.url !== '/'
}
exports.server = http.createServer(RequestProcessor)