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
12345678910111213141516#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
12345678910sudo 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
123sudo nano /etc/nginx/sites-available/default
#server_name _;
return 444;
NGINX – site
12345678910111213141516171819202122232425sudo 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
12sudo nginx -t
sudo service nginx reload
CERTBOT – LetsEncrypt
1234sudo apt install certbot
sudo apt install python3-certbot-nginx
sudo certbot --nginx -d rp.missingremote.com