Dan
Dan

Reputation: 57

Nginx - Generic redirect all www to non-www

Is it possible to make a generic HTTP -> HTTPS and WWW -> non-WWW redirect in Nginx which impact all domains. Or do I need to set it up for every single domain?

I've made the HTTP->HTTPS as follows:

server {
    listen 80 default_server;
    server_name _;
    return 301 https://$host$request_uri;
}

Upvotes: 0

Views: 418

Answers (1)

Ivan Shatsky
Ivan Shatsky

Reputation: 15470

You should use two server blocks for this:

server { # redirect http/https www.example.com to https://example.com
    listen 80;
    listen 443 ssl;
    server_name www.example.com;
    ssl_certificate     <path_to_ssl_cert_for_domain_www.example.com>;
    ssl_certificate_key <path_to_key_for_ssl_cert_above>;
    # other ssl parameters here if needed
    return 301 https://example.com$request_uri;
}

server { # redirect http://example.com to https://example.com
    listen 80;
    server_name example.com;
    return 301 https://example.com$request_uri;
}

server { # main site config
    listen 443 ssl;
    server_name example.com;
    # rest of your configuration here
    ...
}

Usually paid SSL certificates already includes both domain name with www prefix and without it. If you're using Lets Encrypt service, you can generate certificate for both example.com and www.example.com by yourself.

Upvotes: 2

Related Questions