O segundo caminho é melhor ...
server {
listen 80;
server_name www.domain.com;
return 301 $scheme://domain.com$request_uri;
}
Por que
Deixe-me citar diretamente no wiki oficial do Nginx, em Armadilhas e erros comuns :
By using the built-in variable $request_uri, we can effectively avoid doing any capturing or matching at all, and by using the return directive, we can completely avoid evaluation of regular expression.
Meus próprios pensamentos ...
Por padrão, o regex é caro e diminui o desempenho.