Viewed: 1722
Terminal

Redirecting an old domain to a new domain with nginx

Server management isn’t a topic I thought I would write about, however I had to do something for the first time on nginx. There is plenty of information out there on this topic. As someone who was new to redirecting old and new domains on nginx particularly, the information is making a few assumptions. For me, it wasted much of the time, it took me to do this. As I was second guessing what would happen.

In this post I want to reassure you and guide you through the process. Answering the questions, that you may have, for what appears to be a simple looking task.

Open your current config

Navigate to your current website config file. I do this through ssh, it should be be pretty much identical to this for you. You can also do it through FTP.

Navigate to your sites-available folder

cd /etc/nginx/sites-available

Make a backup

It’s important to make a backup of your current config should something go wrong. You can either copy the contents and paste it into another file on your computer or use the cp command on your server.

cp mysite.com mysite-backup.com

This could be named ‘default’ it depends on how you setup your server originally.

Edit your site config file

sudo nano mysite.com

Find the server block containing your domain

Your current setup should look similar to the following.

server {
  # don’t forget to tell on which port this server listens
  listen [::]:80;
  listen 80;

  # listen on the www host for all domains
  server_name www.currentdomain.com;

  # and redirect to the non-www host (declared below)
  return 301 $scheme://currentdomain.com$request_uri;
}

Now to update it

Your current server_name may be listening for only one domain, the www version. Which is then redirected to the non-www version. To get this to redirect to your new domain, you need to add your old domain, both www, and non-www, to the server name. As well as the www version of your new domain.

server {
  # don’t forget to tell on which port this server listens
  listen [::]:80;
  listen 80;

  # listen on the www host for all domains
  server_name www.olddomain.com olddomain.com www.newdomain.com;

  # and redirect to the non-www host (declared below)
  return 301 $scheme://newdomain.com$request_uri;
}

It’s important to note that $request_uri will listen for and redirect to anything after the domain. So you can be assured everyone will be redirected to the correct place.

Update any other instances of server_name throughout your config file that you may have.

Reload nginx

Finally you need to reload nginx.

sudo service nginx reload

Test

Test a few URL’s to make sure everything works nicely, it will, but it’s always important to test.

If you have any questions ask away on twitter

Next to read

Using webkit2png to generate responsive screenshots