How to Install Nginx and Setting Up Server Block to Domain on AWS EC2
Before beginning this guide, first you must have an EC2 Instance, you can follow this post to launch an EC2 instance.
In this post, I use EC2 Instance of Ubuntu Server 18.04, and access the instance using SSH connection in a terminal of my Ubuntu Desktop, follow this post to connect to EC2 instance.
Configure security group of your instance to add HTTP & HTTPS connection in inbound traffic, you can follow this post to configure security group.
Prepare a domain or subdomain, added using A Record that pointing to public IP4 address of your instance, either default IP4 address or Elastic IP4 address.
Install Nginx
Update Packages
sudo apt update
Install Nginx
sudo apt install nginx
Check Nginx Status
sudo service nginx status
Open your instance detail and copy public DNS or public IP Address
Open a browser and paste it to check that Nginx successfully installed
Setting Up Nginx Server Block
When using the Nginx web server, server blocks (similar to virtual hosts in Apache) can be used to encapsulate configuration details and host more than one domain from a single server [ref].
In this post, I will set up my subdomain called api.budidev.com
, but you should replace this with your own domain or subdomain name.
Create Directory and index.html Sample File
Create directory for api.budidev.com
sudo mkdir -p /var/www/api.budidev.com/html
Assign ownership of the directory to current login user
sudo chown -R $USER:$USER /var/www/api.budidev.com/html
Create a sample index.html
using nano
nano /var/www/api.budidev.com/html/index.html
Fill the index.html
like the example below
<html>
<head>
<title>Welcome to api.budidev.com</title>
</head>
<body>
<h1>Success! The api.budidev.com server block is working!</h1>
</body>
</html>
Create New Nginx Server Block
Create new configuration server block file called api.budidev.com
sudo nano /etc/nginx/sites-available/api.budidev.com
Fill the content like the example below
server {
listen 80;
listen [::]:80;
root /var/www/api.budidev.com/html;
index index.html index.htm index.nginx-debian.html;
server_name api.budidev.com;
location / {
try_files $uri $uri/ =404;
}
}
Enable the api.budidev.com
configuration file by creating a link from it to the sites-enabled directory
sudo ln -s /etc/nginx/sites-available/api.budidev.com /etc/nginx/sites-enabled/
Configure Nginx
To avoid a possible hash bucket memory problem that can arise from adding additional server names, it is necessary to adjust a single value in the /etc/nginx/nginx.conf
file [ref].
Open nginx.conf
file
sudo nano /etc/nginx/nginx.conf
Find the server_names_hash_bucket_size
and remove the #
symbol to uncomment the line
http {
server_names_hash_bucket_size 64;
}
Test Nginx configuration
sudo nginx -t
If there aren’t any problems, restart Nginx to enable changes
sudo service nginx restart
Nginx should now serve your domain or subdomain. You can test this using browser by navigating to http://your-domain-subdomain.com
, for me is http://api.budidev.com