How can you redirect HTTP to HTTPS (GCP Load Balancing)?

I'm playing with GCP Load Balancing and want to redirect HTTP to HTTPS links. But cannot figure out.

My Load Balancing looks like:

Load balancer name
Front End:
  Protocols     IP             Certificate
  HTTP          x.x.x.x:80     -
  HTTPS         x.x.x.x:443    example-com

Back End: 
  Hosts          Paths        Backend
  example.com    /*           webs-backend

My webs backend is a simple nginx web server that listens on TCP/80 port. Nginx server configs:

server {
  server_name example.com;
  root /var/www/html;

  <snip>
}

Now with this GCP Load Balancing setup, I can access both HTTP and HTTPS, tried to configure Nginx to send cleints 301 redirect to HTTPS and it won't work. Too many redirects.

Question is, how can I configure GCP Load Balancing to redirect HTTP to HTTPS properly?


Solution 1:

There is feature request submitted to Google product engineering team to support it on GCP HTTP(s) load-balancer. You can track this on Google public issue tracker.

There is a thread discussing the same and in NGINX server you can accomplish the same by adding following string into nginx configuration file like this:

if ($http_x_forwarded_proto = "http") { 
  return 301 https://$host$request_uri; 
}

You can check this thread as well which may help you.

Solution 2:

Currently, you can do it directly from HTTP(S) Load Balancing. Google Cloud released Rewrites and Redirects support (since April 2020).

See this article to learn how to setup:

  • https://cloud.google.com/load-balancing/docs/https/setting-up-traffic-management#console

More details about this feature:

  • https://cloud.google.com/load-balancing/docs/features#routing_and_traffic_management