Redirecting HTTP requests to HTTPS

This application note is intended to help you implement the transparent redirection of HTTP requests
to HTTPS via the ALOHA Load Balancer solution.


Objective

Replace an http url with https


Constraints

In order to rewrite requests, you may need to understand regular expressions


Complexity

2


Versions

v3.x and later

ALOHA load balancer
Redirecting HTTP requests to HTTPS


Target network diagram


ALOHA 5.5.x and above

ALOHA 5.5 and above also include the options “redirect location” and “redirect prefix” described in the next chapter.

However, the option below is purposely made for scheme changes:

redirect scheme <sch> [code <code>] <option> [{if | unless} <condition>]

For the ALOHA 5.5.4 and above, it is recommended to use the corresponding http-request function:

http-request redirect scheme <sch> [code <code>] <option> [{if | unless} <condition>]

Return an HTTP redirection if a condition is met. If no condition is specified, the redirection is applied to all requests.

Arguments:

scheme: the Location header is exactly the same as the request URL, but the scheme is turned into <sch>.

<code> The code is optional. It indicates which HTTP redirection type is required. Only codes 301, 302 and 303 are managed. Code 302 is used if no other code is specified.

<option> You can specify several options in order to adapt the expected behavior of a redirection:

“drop-query”
When this option is used with a redirection based on the prefix, the location will be set without any additional query string.

“append-slash”
Use this option in conjunction with “drop-query” in order to redirect users who specified a URL which does not end with “/”. This may be useful to ensure search engines see only one URL.

“set-cookie NAME [=value]”
A “set-cookie” header will be added to the response with a name (and “= value” as required). This method is used occasionally to specify that a user has been seen. If no additional options are added, then the cookie will be a session cookie.

“clear-cookie NAME [=]”
A “set-cookie” header will be added with a name (and “=” as required), but with “Max-Age” set to zero. This option tells the browser to delete this cookie.


LB Level7 configuration example

######## The first public address as seen by the clients
frontend frt
	bind 10.0.32.10:80
	bind 10.0.32.10:443 ssl crt www.domain.com
	mode http
	log global # use global log parameters
	option httplog # Enable HTTP logging
	# Detect HTTPS protocol
	acl https ssl_fc
	# Detect the folder to secure
	acl sensitive_folder path_beg /secure
	# Redirect "http" to "https"
	redirect scheme https if !https sensitive_folder
	# Redirect "https" to "http"
	redirect scheme http if https !sensitive_folder
	maxconn 4000 # max conn per instance
	timeout client 25s # maximum client idle time (ms)
	default_backend bck # send everything to this backend by default

ALOHA 3.0.x to 5.0.x

Redirect location <to> [code <code>] <option> [{if | unless} <condition>]
Redirect prefix <to> [code <code>] <option> [{if | unless} <condition>]

Return an HTTP redirection if a condition is met. If no condition is specified, the redirection is applied to all requests.

Arguments:

location: the <to> string is placed in the “Location” header of the HTTP redirection response.

prefix: the “Location” header of the HTTP redirection response is created by concatenating the <to> string and the complete URL from the request

<code> The code is optional. It indicates which HTTP redirection type is required. Only codes 301, 302 and 303 are managed. Code 302 is used if no other code is specified.

<option> You can specify several options in order to adapt the expected behavior of a redirection:

“drop-query”
When this option is used with a redirection based on the prefix, the location will be set without any additional query string.

“append-slash”
Use this option in conjunction with “drop-query” in order to redirect users who specified a URL which does not end with “/”. This may be useful to ensure search engines see only one URL.

“set-cookie NAME [=value]”
A “set-cookie” header will be added to the response with a name (and “= value” as required). This method is used occasionally to specify that a user has been seen. If no additional options are added, then the cookie will be a session cookie.

“clear-cookie NAME [=]”
A “set-cookie” header will be added with a name (and “=” as required), but with “Max-Age” set to zero. This option tells the browser to delete this cookie.


LB Level7 configuration example

######## The first public address as seen by the clients
frontend frt
	bind 10.0.32.10:80
	bind 127.1.0.1:1 # ALOHA 3.0 to 3.6
	bind /ssl:frt # ALOHA 3.7 to 5.0
	mode http
	log global # use global log parameters
	option httplog # Enable HTTP logging
	# Detect the HTTP port
	acl http dst_port 80
	# Detect the folder
	acl folder path_dir secure
	acl https dst_port 1
	# Redirect "http" to "https"
	redirect prefix https://www.mysite.com if http folder
	# Redirect "https" to "http"
	redirect prefix http://www.mysite.com if https !folder
	maxconn 4000 # max conn per instance
	timeout client 25s # maximum client idle time (ms)
	default_backend bck # send everything to this backend by default

Related articles

Writing condition rules

To know how to create rules which allow (or not) the redirection, please read the application note #0057 – http Request Routing.