Skip to main content

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;
    }
}