Here's a quick LineRate proxy code snippet to convert an HTTP request to a HTTPS request using the embedded Node.js engine. The relevant parts of the LineRate proxy config are below, as well.
By modifying the redirect_domain
variable, you can redirect HTTP to HTTPS as well as doing a non-www to a www redirect. For example, you can redirect a request for http://example.com
to https://www.example.com
. The original URI is simply appended to the redirected request, so a request for http://example.com/page1.html
will be redirected to https://www.example.com/page1.html
.
This example uses the self-signed SSL certificate that is included in the LineRate distribution. This is fine for testing, but make sure to create a new SSL profile with your site certificate and key when going to production.
As always, the scripting docs can be found here.
redirect.js:
Put this script in the default scripts directory - /home/linerate/data/scripting/proxy/
and update the redirect_domain
and redirect_type
variables for your environment.
"use strict";
var vsm = require('lrs/virtualServerModule');
// domain name to which to redirect
var redirect_domain = 'www.example.com';
// type of redirect. 301 = temporary, 302 = permanent
var redirect_type = 302;
vsm.on('exist', 'vs_example.com', function(vs) {
console.log('Redirect script installed on Virtual Server: ' + vs.id);
vs.on('request', function(servReq, servResp, cliReq) {
servResp.writeHead(redirect_type, {
'Location': 'https://' + redirect_domain + servReq.url
});
servResp.end();
});
});
LineRate config:
real-server rs1
ip address 10.1.2.100 80
admin-status online
!
virtual-ip vip_example.com
ip address 192.0.2.1 80
admin-status online
!
virtual-ip vip_example.com_https
ip address 192.0.2.1 443
attach ssl profile self-signed
admin-status online
!
virtual-server vs_example.com
attach virtual-ip vip_example.com default
attach real-server rs1
!
virtual-server vs_example.com_https
attach virtual-ip vip_example.com_https default
attach real-server rs1
!
script redirect
source file "proxy/redirect.js"
admin-status online
Example:
user@m1:~/ > curl -L -k -D - http://example.com/test
HTTP/1.1 302 Found
Location: https://www.example.com/test
Date: Wed, 03-Sep-2014 16:39:53 GMT
Transfer-Encoding: chunked
HTTP/1.1 200 OK
Content-Type: text/plain
Date: Wed, 03-Sep-2014 16:39:53 GMT
Transfer-Encoding: chunked
hello world