How to enable HSTS with node-http-proxy?
https, node-http-proxy, node.js
Solution
For your example, I'm not sure as it seems this older question is using `http-proxy@0.8`. However, here's what I've done with `http-proxy@1.0.0`:
var httpProxy = require('http-proxy');
// https server to decrypt TLS traffic and direct to a normal HTTP backend
var proxy = httpProxy.createProxyServer({
target: {
host: 'localhost',
port: 9009 // or whatever port your local http proxy listens on
},
ssl: {
key: fs.readFileSync('valid-ssl-key.pem', 'utf8'),
cert: fs.readFileSync('valid-ssl-cert.pem', 'utf8')
}
}).listen(443); // HTTPS listener for the real server
// http server that redirects all requests to their corresponding
// https urls, and allows standards-compliant HTTP clients to
// prevent future insecure requests.
var server = http.createServer(function(req, res) {
res.statusCode = 301;
res.setHeader('Location', 'https://' + req.headers.host.split(':')[0] + req.url);
res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
return res.end();
});
server.listen(80); // HTTP listener for the old HTTP clients
Problem
Under node.js 0.8, I'm using node-http-proxy in "router table" mode configured like so: ``` var httpProxy = require("http-proxy"); var config = require("./config"); proxyServer = httpProxy.createServer({ hostnameOnly: true, router: { "one.example.com": "localhost:9000", "two.example.com": "localhost:9001" }, https: { key: config.key, cert: config.cert, // mitigate BEAST: https://community.qualys.com/blogs/securitylabs/2011/10/17/mitigating-the-beast-attack-on-tls honorCipherOrder: true, ciphers: "ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH" } }) proxyServer.listen(8000) ``` I'd like to add HSTS (HTTP Strict Transport Security) so that compliant browsers will be told to always use SSL. To do this, I need to get http-proxy to add the header: ``` Strict-Transport-Security: max-age=60000 ``` (or other max-age). How can I ask node-http-proxy to efficiently append this header?