This is the correct and most efficient way if you want to keep it all in one server block:
server { listen 80; listen [::]:80; listen 443 default_server ssl; server_name www.example.com; ssl_certificate /path/to/my/cert; ssl_certificate_key /path/to/my/key; if ($scheme = http) { return 301 https://$server_name$request_uri; } }
Source: How to force or redirect to SSL in nginx? – Server Fault