Nginx HTTP to HTTPS and non-www to www behind Google Load Balancer

Posted on February 18, 2019 at 10:33 pm

First create two forwarding rules on Google Load Balancer (frontend):

– One for HTTPS (port 443) traffic
– One for HTTP (port 80) traffic

Then make sure both rules use the same static IP address.

Now on the Compute Engine backend, edit the Nginx config file:

server {
    	listen 80;
    	server_name localhost;
    	access_log /var/www/nginx/logs/access.log main;
    	error_log /var/www/nginx/logs/error.log warn;
    	root /var/www/nginx/htdocs;
    	index index.html index.htm index.php;
        # Redirect non-www to HTTPS + www
    	if ($host !~ ^www\.) {
    	    rewrite ^ https://www.$host$request_uri permanent;
        # Redirect HTTP to HTTPS
        if ($http_x_forwarded_proto != 'https') {
            return 301 https://$host$request_uri;

Then restart Nginx and that’s all, just wait a few minutes now!

Remember: it can take 5+ minutes and up for the Load Balancer to update itself.

Receive updates via email

Other Posts

Updated Posts