Last active
December 23, 2022 10:43
-
-
Save clemlatz/35cf6765f935e7930807 to your computer and use it in GitHub Desktop.
Set up ssl proxy with nginx and letsencrypt (https://secure.example.com => http://example.com)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# SSL server config | |
server { | |
listen 443 ssl; | |
server_name secure.example.com; | |
ssl_certificate /etc/letsencrypt/live/secure.example.com/fullchain.pem; | |
ssl_certificate_key /etc/letsencrypt/live/secure.example.com/privkey.pem; | |
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; | |
ssl_prefer_server_ciphers on; | |
ssl_dhparam /etc/ssl/certs/dhparam.pem; | |
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; | |
ssl_session_timeout 1d; | |
ssl_session_cache shared:SSL:50m; | |
ssl_stapling on; | |
ssl_stapling_verify on; | |
add_header Strict-Transport-Security max-age=15768000; | |
location / { | |
proxy_set_header Host $host; | |
proxy_set_header X-Real-IP $remote_addr; | |
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
proxy_set_header X-Forwarded-Proto $scheme; | |
proxy_pass http://example.com; | |
proxy_read_timeout 90; | |
} | |
} | |
# Redirect http to https | |
server { | |
listen 80; | |
server_name example.com www.example.com; | |
return 301 https://$host$request_uri; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Update & upgrade | |
sudo apt-get update | |
sudo apt-get upgrade | |
# Install & start nginx | |
sudo apt-get install nginx -y | |
sudo service nginx start | |
# Install git | |
sudo apt-get install git -y | |
# Install letsencrypt | |
sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt | |
# Install letsencrypt dependencies | |
sudo /opt/letsencrypt/letsencrypt-auto --help all | |
# Stop nginx (port 80 needed by letsencrypt) | |
sudo service nginx stop | |
# Generate certificate | |
sudo /opt/letsencrypt/letsencrypt-auto certonly --rsa-key-size 4096 | |
# Generate a strong Diffie-Hellman (2048-bit) group | |
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 | |
# Config nginx to use certificate (see nginx-config.conf) | |
sudo vim /etc/nginx/sites-available/secure.example.com | |
sudo ln -s /etc/nginx/sites-available/secure.example.com /etc/nginx/sites-enabled/secure.example.com | |
# Restart nginx | |
sudo service nginx start | |
# Test SSL config with https://www.ssllabs.com/ssltest/ | |
# Install firewall (ufw) | |
sudo apt-get install ufw -y | |
# Open SSH, HTTP & HTTPS ports | |
sudo ufw allow ssh | |
sudo ufw allow http | |
sudo ufw allow https | |
# Enable ufw | |
sudo ufw enable | |
sudo ufw status | |
# Configure SSL certificate renew with letsencrypt & cron | |
# /opt/letsencrypt/letsencrypt-auto renew | |
sudo crontab -e | |
# Add to crontab (to auto renew certs every monday) | |
# 30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log | |
# 35 2 * * 1 /etc/init.d/nginx reload | |
# Sources | |
# - https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-14-04 | |
# - https://www.digitalocean.com/community/tutorials/how-to-configure-nginx-with-ssl-as-a-reverse-proxy-for-jenkins |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment