if ($http_host != "site.ru") { rewrite ^ $scheme://site.ru$request_uri? permanent; }
if ($scheme != "https") { rewrite ^ https://$http_host$request_uri? permanent;}
Ещё можно для http сделать отдельный виртуальный хост и редиректить с него по этому правилу
rewrite ^ https://$http_host$request_uri? permanent;
И аналогично сделать виртуальный хост для www отдельный и редиректить там так
rewrite ^ $scheme://site.ru$request_uri? permanent;
Поясню разницу подходов, если будут отдельные виртуальные хосты будет оптимальнее. Ведь if проверяется при каждом открытии тратя ресурсы, а если редиректы распиханы по виртуальным хостам ресурсы не тратятся)