# Deploying Web Applications with NGINX HTTP Server

### Introduction to NGINX

NGINX is a powerful and efficient HTTP server and reverse proxy. It was created by Igor Sysoev in 2004 to solve the problem of handling a large number of simultaneous connections, known as the "C10K problem". Traditional web servers struggled with this, but NGINX's asynchronous framework made it a game-changer for high-performance web applications.

### Why NGINX Stands Out

Many web servers are available, but NGINX is preferred for several reasons:

1. Cost-Effective: NGINX requires less memory due to its event-driven architecture.
2. High Performance: It can handle thousands of connections simultaneously, making it ideal for busy websites.
3. Open Source: NGINX is free and open-source, which is a big plus for many users.
4. Fast Loading Times: Websites load faster, which is important for user experience and SEO.
5. Trusted by Major Companies: Netflix, WordPress.com, Pinterest, and Hulu use NGINX for its stability and high performance.

### Additional Uses of NGINX

Besides being a web server, NGINX has several other important uses:

#### Reverse Proxy Server:

NGINX can act as a reverse proxy server, which directs client requests to appropriate backend servers. This improves performance by caching static content and adding security.

#### Email Proxy Server

NGINX supports email protocols like IMAP, POP3, and SMTP, making it a good choice for email services. It can efficiently handle email traffic and scale as your business grows.

#### Load Balancer

NGINX can distribute incoming traffic across multiple servers, balancing the load and preventing any single server from becoming overwhelmed. This makes it ideal for dynamic websites and cloud-based applications.

### Deploying Web Applications with NGINX

Here's a step-by-step guide to deploying a web application with NGINX:

#### On Linux:

1. Install NGINX on Ubuntu:

* **sudo apt update**&#x20;
* **sudo apt upgrade -y**&#x20;
* **sudo apt install nginx**

2. &#x20;Start and enable NGINX:

* **sudo systemctl start nginx**&#x20;
* **sudo systemctl enable nginx**

#### Configure NGINX:

* Navigate to the configuration directory:

**cd /etc/nginx/sites-available/**

* Create a new config file:

**sudo nano myapp.conf**

* Add the following configuration:

**server {**

&#x20;   **listen 80;**

&#x20;   **server\_name example.com;  # Replace with your domain name or IP  address**

&#x20;   **root /var/www/myapp;  # Path to your web application**

&#x20;   **index index.html index.htm;**

&#x20;   **location / {**

&#x20;       **try\_files $uri $uri/ =404;**

&#x20;   **}**

&#x20;   **error\_page 404 /404.html;**

&#x20;   **location = /404.html {**

&#x20;       **internal;**

&#x20;   **}**

&#x20;   **error\_page 500 502 503 504 /50x.html;**

&#x20;   **location = /50x.html {**

&#x20;       **internal;**

&#x20;   **}**

**}**

* Enable the site:
  * **sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/**
  * **sudo nginx -t     # Test the configuration**
  * **sudo systemctl reload nginx  # Reload NGINX**

#### Set Up Your Web Application:

* Place your web application files in the root directory:

**sudo mkdir -p /var/www/myapp**

**sudo cp -r /path/to/your/app/\* /var/www/myapp/**

* Set the correct permissions:

**sudo chown -R abc:abc /var/www/myapp**

**sudo chmod -R 755 /var/www/myapp**

#### Check Your Setup:

* Open a web browser and go to <http://your\\_server\\_ip> or <http://example.com>.

#### SSL Configuration&#x20;

For enhanced security, use Let's Encrypt to obtain an SSL certificate:

1. Install Certbot:

**sudo snap install --classic certbot**

2. Obtain and Install the Certificate:

**sudo certbot certonly --standalone -d example.com --register-unsafely-without-email --non-interactive --agree-tos**

### Conclusion

NGINX is a versatile and high-performance web server suitable for various applications. Whether you're serving a simple website, acting as a reverse proxy, handling email traffic, or balancing loads, NGINX provides a robust solution. By following this guide, you can deploy your web application efficiently and enjoy the benefits of using NGINX.<br>
