Enable Multiple Servers/Sites Behind One Public IP With A Reverse Proxy

Most home Internet users only have one public IP address. That is very limiting if you want to expose multiple services/servers/sites to the Internet. A reverse proxy solves that problem. In this tutorial, we will walk through how to install and configure NGINX as a reverse proxy as well as some additional steps to enhance the security of the hosting system.


Index

  • Securing SSH – 01:42
  • Basic UFW/NGNIX Setup – 03:55
  • Configuring NGNIX – 05:36
  • Installing a Certificate – 11:56

SSH

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ssh cert auth
mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys
 
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
 
ls -l /etc/ssh/sshd_config.d/
 
#force cert use for SSH
 
sudo nano /etc/ssh/sshd_config.d/50-cloud-init.conf
 
PermitRootLogin no
PasswordAuthentication no
 
sudo systemctl restart sshd

UFW

1
2
3
4
5
6
7
8
9
10
sudo apt list --installed | grep -i ufw
sudo apt install ufw
sudo ufw default allow outgoing
sudo ufw default deny incoming
sudo ufw allow ssh
sudo ufw allow http/tcp
sudo ufw allow https/tcp
sudo ufw status
sudo ufw enable
sudo ufw disable

NGINIX – default

1
2
3
sudo nano /etc/nginx/sites-available/default
#server_name _;
return 444;

NGINX – site

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sudo nano /etc/nginx/sites-available/rp.missingremote.com.conf
 
server {
server_name rp.missingremote.com;
listen 80;
listen [::]:80;
 
set $remoteserver 192.168.13.172:80;
 
location / {
return 444;
#proxy_pass http://$site;
# include proxy_params;
}
 
location /site {
rewrite ^/site(.*)$ $1 break;
proxy_pass_header Authorization;
proxy_pass $scheme://$remoteserver;
# proxy_pass http://$remoteserver;
include proxy_params;
}
}
 
sudo ln -s /etc/nginx/sites-available/rp.missingremote.com.conf /etc/nginx/sites-enabled/rp.missingremote.com.conf

NGINIX – commands

1
2
sudo nginx -t
sudo service nginx reload

CERTBOT – LetsEncrypt

1
2
3
4
sudo apt install certbot
sudo apt install python3-certbot-nginx
 
sudo certbot --nginx -d rp.missingremote.com