Introduction

“What is done wholeheartedly however small, is noble”

If you would wish to share the same FQDN such as api.computingforgeeks.com to serve more than one site or to serve APIs, then this will help you. If you have two sites hosted on different servers in your environment for example sales and accounting, your clients will need to do the following on the browser to access the different sites.

To Access Sales site
https://api.computingforgeeks.com/sales

To Access Accounts site
https://api.computingforgeeks.com/accounts

As you can see, we are using the same FQDN to serve different sites which are differentiated by /sales and /accounting. This will save you more public IPs and Firewall Rules if you have one in your environment.

We hope you have Nginx already installed and running.

--- Install Nginx on Ubuntu / Debian ------
$ sudo apt -y install nginx
$ sudo systemctl enable --now nginx

--- Install Nginx on CentOS / Fedora ------
$ sudo yum -y install nginx
$ sudo systemctl enable --now nginx

--- Install Arch Linux / Manjaro ------
$ sudo pacman -S nginx
$ sudo systemctl enable --now nginx

Step 1: Modify Main Nginx Configuration file

Open up Nginx default configuration file and add the following line inside the http part. Make sure it is within the http curly brackets.

http {
....
......

include /etc/nginx/sites.d/*.conf;
}

This adds the configuration files in /etc/nginx/sites.d/ for nginx to read and act on them

Step 2: Create main Site configuration file

Let us now add our main site FQDN configuration file in /etc/nginx/sites.d

$ sudo vim api.computingforgeeks.com

server {
  listen 80;
  server_name  api.computingforgeeks.com;
  return 301 https://api.computingforgeeks.com$request_uri;
}
 
server {
  listen 443 ssl http2;
  server_name api.computingforgeeks.com; 
  modsecurity_transaction_id "api.computingforgeeks.com-$request_id"; 
  access_log           /var/log/nginx/test-api-access.log; 
  error_log            /var/log/nginx/test-api-error.log; 
  include              /etc/nginx/default.d/api.computingforgeeks.com/*.conf;
}

The specific sites will be located in /etc/nginx/default.d/api.computingforgeeks.com/ and as you can notice, that has been included in our configuration file.

Step 3: Create site routing configurations

Now create the sites under /etc/nginx/default.d/api.computingforgeeks.com/ directory as included in the configuration above. In this setup, we’ll create one for sales

cd /etc/nginx/default.d/api.computingforgeeks.com

This configuration will redirect traffic to server 1 (192.168.55.60) hosting sales site listening on port 8443

$ sudo vim sales.conf
location /sales/ {
  proxy_http_version 1.1;
  proxy_pass https://192.168.55.60:8443/sales/;
  proxy_cache_bypass $http_upgrade;
  proxy_set_header Connection 'upgrade';
  proxy_set_header Upgrade $http_upgrade;
}

This configuration will redirect traffic to server 1 (192.168.55.63) hosting sales site listening on port 8080

 $ sudo vim accounts.conf 
location /accounts/ {
   proxy_http_version 1.1;
   proxy_pass https://192.168.55.63:8080/accounts/;
   proxy_cache_bypass $http_upgrade;
   proxy_set_header Connection 'upgrade';
   proxy_set_header Upgrade $http_upgrade;
}

That is all you need to configure your nginx to proxy your sites or APIs using the same FQDN. Thank you for reading through and before you decide to shift your eyes, take a look at related guides below:

Install Varnish Cache 6 for Apache/Nginx on CentOS 7

How to hide X-Powered-By / X-CF-Powered-By PHP headers in Nginx

How To Enable GZIP & Brotli Compression for Nginx on Linux

Configure JFrog Artifactory behind Nginx reverse proxy and Let’s Encrypt SSLConfigure JFrog Artifactory behind Nginx reverse proxy and Let’s Encrypt SSL

Configure Jenkins behind Nginx reverse proxy and Let’s Encrypt SSL

How to solve nginx: [warn] could not build optimal proxy_headers_hash error

Install WordPress with Nginx on Ubuntu 18.04 / Debian 9