I have the following nginx configuration fragment:
server {
   listen 80;
   server_name mydomain.io;
   root /srv/www/domains/mydomain.io;
   index index         
        
I believe it's better to add two seperate server blocks to avoid unnecessary checking by the if block. I also use the $scheme variable so that HTTPS requests will not be redirected to their insecure counterparts.
server {
    listen 80;
    server_name www.mydomain.io;
    rewrite ^ $scheme://mydomain.io$uri permanent;
}
server {
    listen 80;
    server_name mydomain.io;
    # your normal server block definitions here
}