Site Config Template
# Redirect ALL HTTP to HTTPS (non-www)
server {
listen 80;
server_name domain.com www.domain.com;
return 301 https://domain.com$request_uri;
}
# Redirect HTTPS www to HTTPS non-www
server {
listen 443 ssl;
server_name www.domain.com;
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
return 301 https://domain.com$request_uri;
}
# Main server block for domain.com (HTTPS, non-www)
server {
listen 443 ssl;
server_name domain.com;
ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
# SSL Security Settings
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
# Security Headers
add_header X-Robots-Tag "index, follow" always;
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" always;
add_header Content-Language "en";
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
# Real IP settings
real_ip_header X-Forwarded-For;
real_ip_recursive on;
# Global tuning
client_max_body_size 0;
underscores_in_headers on;
# Logging
access_log /var/log/nginx/domain.access.log geoip2;
error_log /var/log/nginx/domain.error.log;
# Main proxy to container
location / {
proxy_pass http://192.168.0.xxx/;
proxy_http_version 1.1;
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_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
# ACME Challenge for Let's Encrypt
location ^~ /.well-known/acme-challenge/ {
allow all;
root /var/www/html;
}
# Security.txt handler
location ^~ /.well-known/security.txt {
root /var/www/html;
}
}