How To Install Nginx On Aws Ec2
Nginx is a web server like apache. Not only as a web server, but it can also act as a load balancer, reverse proxy, etc. Performance-wise, Nginx is considered to be better than apache. Processing request in Nginx is even based as opposed to the spanning new thread model in apache.
In this tutorial, I will explain how to install and configure Nginx on ec2 RHEL and
The process for installing & configuring Nginx on RHEL , Centos and Amazon Linux is the same.
Instance Setup
- Launch an RHEL/Centos/Ubuntu instance using the management console. While launching the
instance , configure the security group to allow traffic from HTTP 80 port & HTTPS 443. - Connect the instance using putty.
- You can also setup password authentication to the ec2 instance
Nginx Setup on RHEL/Centos/Ubuntu
In this guide, we will look in the following.
Install Nginx on RHEL & Centos
Step 1: In RHEL you cannot download and install Nginx directly. You have to setup the epel ( extra packages for enterprise Linux) repo to install Nginx. Install EPEL package repository.
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
For Centos, execute the following.
sudo yum install -y epel-release
Step 2: Update the package list.
sudo yum update -y
Step 3: Install Nginx
sudo yum install nginx -y
Install Nginx on Ubuntu
Execute the following steps to install Nginx on Ubuntu servers.
sudo apt update sudo apt install nginx -y
Start and Enable Nginx
Following steps are common for RHEL and Ubuntu systems.
Step 1: Check the version to make sure Nginx is installed.
sudo nginx -v
Step 2: Start and enable Nginx.
sudo systemctl start nginx sudo systemctl enable nginx
Step 3: Check the status of Nginx to make sure it is running as expected.
sudo systemctl status nginx
Step 4: Visit the nginx page using the Server IP. You should be seeing
For example,
http://[server-ip]
Setting up Multiple Domains Using Nginx Server Blocks
When you have one or more websites to be hosted on the same Nginx server, you need to use the Virtual Hosts configuration.
In this section I will show you how to create a virtual host configuration for a website.
Step 1: Create the website folder and a public folder to put the static assets inside /var/www
Here am going to give the name as example-one.com. Name the folder with your website name. It will be easy to identify if you have many websites running on the same server.
sudo mkdir /var/www/example-one.com/public_html
Step 2: Create a test index.html file if you dont have your own index file.
sudo vi /var/www/example-one.com/public_html/index.html
Copy the following contents and save the file.
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>Welcome to example-one.com</title> </head> <body> <h1>Welcome To example-one.com home page!</h1> </body> </html>
Step 3: Change the ownership of the root document to the user which is managing the worker process.
For RHEL/Centos the user is nginx,
sudo chown -R nginx: /var/www/example-one.com
In most of the RHEL/Centos distributions, SElinux will be set to in enforcing mode. Execute the following commands for SELinux to allow accessing the nginx website files.
sudo setsebool -P httpd_can_network_connect on chcon -Rt httpd_sys_content_t /var/www/
For Ubuntu the user is www-data,
sudo chown -R www-data: /var/www/example-one.com
Step 4: Create a Nginx configuration file with the websites name
For RHEL/Centos,
Create the config gile under /etc/nginx/conf.d/
folder.
sudo vi /etc/nginx/conf.d/example-one.com.conf
For Ubuntu,
Create the config file under /etc/nginx/sites-available/
folder.
sudo vi /etc/nginx/sites-available/example-one.com.conf
Copy the following server block configuration the conf file and save it.
Note: Replace example-one with your domain name.
server { listen 80; listen [::]:80; root /var/www/example-one.com/public_html; index index.html; server_name example-one.com www.example-one.com; access_log /var/log/nginx/example-one.com.access.log; error_log /var/log/nginx/example-one.com.error.log; location / { try_files $uri $uri/ =404; } }
Only on Ubuntu server, execute the following command to create a symbolic link to sites-enabled folder.
sudo ln -s /etc/nginx/sites-available/example-one.com.conf /etc/nginx/sites-enabled/example-one.com.conf
Step 5: Validate the server block configuration using the following command.
sudo nginx -t
If should get the following success message.
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Step 6: Restart the nginx server.
sudo systemctl restart nginx
If you use the public DNS of the ec2 instance , the server will throw the following error when you restart the Nginx server.
nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 64
Since the DNS name is pretty long , you have to add the server name bucket size to 128 to the example-one.conf file.
server_names_hash_bucket_size 128;
Now you will be able to access the website using your domain name. If you have used the test domain names, add it to your systems /etc/hosts file and try accessing the website.
To add more domains to the nginx server, follow the same steps with a different domain name and config names as explained.
Nginx SSL Setup
Optionally you can setup SSL for your Nginx websites. You can use the free SSL certificates from Letsencrpt for your SSL need.
I have written a tutorial for setting up SSL using Letsencryp. Read the tutorial here -> Nginx Letsencrypt Setup Guide Using Certbot
Load balancing using Nginx
You can use Nginx as a load balancer to balance the load between server fleets. Nginx proxies the incoming requests and sends it to the backend servers. To configure Nginx as a load balancer, you have to add two blocks of code to the nginx configuration file.
Step 1: Open nginx.conf file
sudo vi /etc/nginx/nginx.conf
Step 2: Add the upstream group under the HTTP section. The upstream group is the group of servers which comes under the load balancer. You can give any user defined name for the group. Here am going to give the name as "web_fleet".
Note: this configuration should be present in the HTTP section of nginx.conf file.
upstream web_fleet { server 54.136.14.10:80; server 64.156.14.11:80; server 94.176.14.12:80; }
Step 3: Now you have to set the vhost configuration to receive traffic from a particular domain name and route it to the upstream servers. Add the following lines followed by the upstream block and save the file.
server { listen 80; server_name example-one.com www.example-one.com; location / { proxy_pass http://web_fleet; } }
Step 4: Restart the Nginx server
sudo systemctl restart nginx
Step 5: Now, if you access your nginx server using the DNS, the request will be routed to the backend server fleet present in the upstream block.
Make sure some service is running on the backend servers you mention in the upstream block.
There are many other parameters and setting associated with the load balancing configuration. You can check the official Nginx documentation for more clarification.
How To Install Nginx On Aws Ec2
Source: https://comtechies.com/how-to-install-and-configure-nginx-on-amazon-ec2-rhel-and-ubuntu-instances.html
Posted by: hallfromen77.blogspot.com
0 Response to "How To Install Nginx On Aws Ec2"
Post a Comment