Article

Table of Contents
Theme:
Was this article helpful?
Try Vultr Today with

$50 Free on Us!

Want to contribute?

You could earn up to $600 by adding new articles!

Redirect non-www and www URLs on Nginx

Last Updated: Tue, Oct 20, 2020
CentOS Debian Ubuntu Web Servers

Introduction

You may run a website on the www or non-www address as a personal preference, but to prevent redundant hostnames it's recommended to choose one style and be consistent throughout your site. Whichever address you choose, you should make a permanent HTTP 301 redirect from the other address to prevent Google Analytics from logging it as a redundant hostname.

This article describes how to configure Nginx to redirect a non-www URL to the www address, and vice-versa.

Prerequisites

  • You have a Vultr Linux instance running Nginx.
  • You have a domain name such as example.com whose DNS A records for "@" and "www" are pointing to the IP address of the Vultr instance.

Nginx Hosting a Single Domain

How to Redirect non-www to www

  1. Locate your virtual host configuration file, which is typically located in /etc/nginx/sites-available.
  2. Add an new server block at the top, above the existing server block, like:

    server {
        listen 80;
        server_name example.com;
        return 301 $scheme://www.example.com$request_uri;
    }
    

    This directive tells Nginx to send any request for http://example.com to http://www.example.com with HTTP redirect code 301.

  3. Restart Nginx to apply the change. Ubuntu or Debian systems use the command:

    $ sudo systemctl restart nginx
    

How to Redirect www to non-www

  1. Locate your virtual host configuration file, which is typically located in /etc/nginx/sites-available.
  2. Add an new server block at the top, above the existing server block, like:

    server {
        listen 80;
        server_name www.example.com;
        return 301 $scheme://example.com$request_uri;
    }
    

    This directive tells Nginx to send any request for http://www.example.com to http://example.com with HTTP redirect code 301.

  3. Restart Nginx to apply the change. Ubuntu or Debian systems use the command:

    $ sudo systemctl restart nginx
    

Nginx Hosting Multiple Domains

If your Nginx server is hosting multiple domains, use this method to match all domain names.

To redirect the non-www URL to the www address for all domains, add this snippet inside the http directive in your nginx.conf file, which is usually located in /etc/nginx.

server {
    server_name "~^(?!www\.).*" ;
    return 301 $scheme://www.$host$request_uri;
}

Or, to redirect the www URL to the non-www address for all domains, add this snippet inside the http directive in your nginx.conf file, which is usually located in /etc/nginx.

server {
    server_name "~^www\.(.*)$" ;
    return 301 $scheme://$1$request_uri ;
}

Restart Nginx to apply the change. Ubuntu or Debian systems use the command:

$ sudo systemctl restart nginx

Want to contribute?

You could earn up to $600 by adding new articles