How to generically remove the www of the domain in nginx?

I have a server config in nginx which matches several domains:

server {
  server_name example1.com example2.com example3.com;
  # ...
}

And I would like to redirect the www versions to the corresponding domains. I know how to do it for a single domain with a redirect and I would know how to do the inverse thing but I can't find a way here.

Any idea ?

Thanks ! :)


Solution 1:

Don't use if

server {
    server_name ~^(www\.)(?<domain>.+)$;
    return 301 $scheme://$domain$request_uri;    
}

That's all ...

Solution 2:

Ok I found this solution:

server {
  server_name www.exemple1.com www.example2.com www.exemple3.com;
  listen 80;

  if ($http_host ~ "www\.(.*)") { #Note the extra "\" after the www
    return 301 $scheme://$1$request_uri;
  }
}

It works like a charm :)