How to install and configure NGINX as reverse proxy

NGINX is a web server with excellent performance and low memory footprint. NGINX can be used as a reverse HTTP proxy, as a generic TCP / UPD proxy, as a mail proxy server and as a load balancer, today we will install NGINX on Debian GNU/Linux and use it as a generic TPC/UPD proxy.


# apt install nginx 


# systemctl start nginx


$ systemctl stop nginx 


# systemctl restart nginx

Start with the OS

# systemctl enable nginx

Reload configuration

You must run the following command after making any modification to any configuration file.

# systemctl reload nginx

Check configuration files

Below we show where the configuration files are found for Debian/Ubuntu

├── conf.d
├── modules-available
├── modules-enabled
├── sites-available
├── sites-enabled
└── snippets

DIRs to pay attention:

  • sites-available: It contains the configuration of all our sites.
  • sites-enabled: It contains the configuration of all our enable sites.

With this hierarchy it is very easy to enable/disable sites: it would be enough to create/delete a symbolic link from sites-enabled DIR.

Configure as reverse proxy.

Create a template under sites-available in order to make easy the new site configuration.

server {
	listen 80;
	# Put here you domain	

	# Max file size useful for file uploading 
	client_max_body_size 8M;
	location / {	
	    # NGINX acting as reverse proxy
	    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	    proxy_set_header X-Forwarded-Proto $scheme;
	    proxy_set_header X-Real-IP $remote_addr;
	    proxy_set_header Host $http_host;
	    # Set the backend url and port, port is optional for standard services
	    # when there is a variable as a part of proxy_pass URL a resolver is needed.
	    proxy_pass http://miurl.internal:port;

Let’s comment some directives:

  • listen: Sets the address and port for IP, or the path for a UNIX-domain socket on which the server will accept requests. Both address and port, or only address or only port can be specified. An address may also be a hostname.
  • server_name: Sets names of a virtual server.
  • proxy_set_header: Allows redefining or appending fields to the request header passed to the proxied server. The value can contain text, variables, and their combinations.

Add new site


# cp -v /etc/nginx/sites-available/proxy /etc/nginx/sites-available/mynewsite

Edit the mynewsite and set the server_name and proxy_pass directives according your needs.

Enable the new site

# ln -s /etc/nginx/sites-available/minuevodominio /etc/nginx/sites-enabled/mynewsite 

Reload configurations

# systemctl reload nginx

Disable a site

# rm -v /etc/nginx/sites-enabled/mynewsite 

You must reload configurations after disable a site.

YouTube video

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.