Create redirects in Nginx

Why use a redirect

You use a redirect whenever a website owner wants an address to reroute to
another address, typically redirecting HTTP to HTTPS
or redirecting one domain to another domain.

HTTP to HTTPS scenario:

You want your customers to reach your secure (SSL) site even if they type
in http://yourwebsite.com or yourwebsite.com into their browser. This type of
redirect accomplishes just that. For example, if your customer types in http://yourwebsite.com,
the redirect in Nginx® redirects the request to https://yourwebsite.com.

One domain to another scenario:

You own yourwebsite.com, yourwebsite.org, and yourwebsite.net, and
you want your customers to arrive at yourwebsite.com regardless of the URL they enter
into their browser to visit your site.

How to redirect in Nginx

The following sections describe how to redirect from HTTP to HTTPS and from one
domain to another domain.

HTTP to HTTPS

When you install an SSL certificate on your server, you have two
server blocks for your website: one each for HTTP and HTTPS. The problem is
you need a way to force traffic to your SSL-secured site (the HTTPS version).
You can accomplish this by adding a redirect to the Nginx server block for your
website.

Open the configuration file for your domain. The file should be named similar to
/etc/nginx/vhost.d/yourwebsite.com.conf. The .conf indicates
the configuration file for your domain. Open the file with your favorite text editor.
The following example uses the vim editor:

vim /etc/nginx/vhost.d/yourdomain.com.conf

Your server block will look similar to this:

server {
	listen 80;
	server_name yourwebsite.com www.yourwebsite.com;
}

Depending on your particular configuration, this might contain more
information than the preceding example, but this is a
simple example focusing on the redirect option.

However, you want your customers to go to the secured version of
yourwebsite.com, so you need to add a redirect to the server block
in the configuration file. To do that, modify the block to look similar
to the following example and save the file:

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

With the preceding redirect line in place, any time your customers type in
yourwebsite.com or www.yourwebsite.com, the system automatically
redirects them to the https://yourwebsite.com version of your website.
Note, however, that you must add this line to the HTTP 80 server block, not
the HTTPS 443 server block.

You should probably also redirect any https://www.yourwebsite.com
requests to https://yourwebsite.com. You can do this by adding another
redirect line to the 443 server block, often located below the 80 server
block in the configuration file. That change looks similar to the following example:

server {
	listen 443;
	server_name www.yourwebsite.com;
	return 301 https://yourwebsite.com$request_uri;
}

server {
	listen 443;
	server_name yourwebsite.com;
}

Note: Your server blocks likely contain more information than the
preceding simplified examples.

One domain to another

When you have a domain with multiple top-level domains (such as .com,
.net, .org, and so on) and want all of those sites to reach the
same website, use a redirect. For this example, we assume that you own
yourwebsite.com, yourwebsite.org, and yourwebsite.net, and you want
to redirect all of those to yourwebsite.com.

Edit the configuration file for your domain again. Instead of adding
an HTTPS redirect, modify the server block as shown in the following
example:

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

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

Now, whenever your customers enter yourwebsite.net or yourwebsite.org, the
system redirects them to yourwebsite.com instead.

Save and close your configuration files after your edits and restart both nginx and
php-fpm to make those changes go live.