99devops

99devops

A highly trained monkey’s blog

19 Jun 2019

Nginx + Apache - A perfect couple

Nginx and apache has been widely used in the IT industry for very long time. Nginx is good as it can handle multiple concurrent request in which Apache was struggling. When apache creates a seperate child processes for each request and each process work on a blocking thread, nginx runs multiple non-blocking threads. There are several pro and cons of nginx but i personally prefer to use the best of both of them. Let’s try to host a website and make use of both nginx and apache (httpd).

nginx-apache

First, Install apache in server using command

yum install httpd -y

Once the installation has been done, you need to do some configuration in httpd.conf file which lies in

/etc/httpd/conf/httpd.conf.

Here search for the line which say listen 80. What we are trying to achieve is apache hosting the actual content of site where as nginx will handle the incoming request from client at standard HTTP port i.e 80. So, we are going to change the port at which apache will run to 8080. Change the line

listen 80

to

listen 8080

Also, find the line that says DocumentRoot and provide the path of the website contents. Mine is in /var/www/html

That’s it. You have configured http server i.e apache at port 8080. Start apache server with command

systemctl start httpd

If you want to check the status, you can issue the command systemctl status httpd. Now, we have hosted the website at port 8080. What we need to do is redirect the incoming request at port 80 to port 8080. For this we will use nginx as a reverse proxy.

Let’s first install nginx with command

yum install nginx -y

Once installation has been done, go to /etc/nginx/nginx.conf. Open that file you will see something like this.

nginx

You will also see a server block, which i have already deleted. Delete the server block inside the http block. We will create new server block later. save the file and exit.

now go inside the conf.d directory in /etc/nginx. Create a new file and save it as any name you want forexample awssite.conf . Now, open the file and write following.

nginx

Once you have written all of these, you can see a interesting element called proxy_pass. This is what will help us sent traffic to apache. Here proxy_pass will listen at port 80, which can be seen as we ran server at made it listen at port 80. Any request for “/” will send it to localhost:8080 and as we did before we have apache running and ready to server content for request coming at port 8080.

Now save the file and and start nginx using command

systemctl start nginx

to check which port nginx and apache is running, run this command

netstat -tulpn

netstat

From above image we can see that nginx is running at port 80 and apache (httpd) is running at port 8080. Now if we try to browse the website then nginx will forward that request to apache server which will then serve the content.

page

This is a basic way how you can use nginx in the front to serve requests and apache in the back to serve web content.

comments powered by Disqus