Web Server

Getting Certificates

We can use letsencrypt to get free SSL certificates for our domain.

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com

Nginx Configuration

We can use the following configuration to proxy the requests to our application. Make sure to replace <domain> with your domain and <port> with the port your application is running on.

server {
    listen 80;
    server_name <domain>;
    return 301 https://$server_name$request_uri;
}
 
server {
  listen 443 http2 ssl;
 
  server_name <domain>;
  ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem;
  ssl_session_cache shared:SSL:10m;
  ssl_protocols SSLv3 TLSv1.2 TLSv1.3;
  ssl_ciphers HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers on;
 
  location / {
    proxy_pass http://localhost:<port>;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_cache_bypass $http_upgrade;
  }
}