If you have NGINX virtual host that has a multi different domains pointing to same document root (multi server_name), and you want to automatically redirect non-www to www, than bellow is simple solution. I also wanted to redirect to https with www.
If you don’t need https redirection, than you can simply use variable $scheme instead of “https:”.
if ( $host !~ ^www\. ) { return 302 https://www.$host$request_uri; }
So virtual host should look something like this:
server { listen 1.1.1.1:80; server_name domain1.com www.domain1.com domain2.com www.domain2.com; if ( $host !~ ^www\. ) { return 302 https://www.$host$request_uri; } return 302 https://$host$request_uri; }
You should also make this redirect in your https server definition. otherwise request for https://domain1.com won’t redirect to www.
server { listen 1.1.1.1:443; server_name domain1.com www.domain1.com domain2.com www.domain2.com; if ( $host !~ ^www\. ) { return 302 https://www.$host$request_uri; } ssl on; ssl_certificate /etc/letsencrypt/live/domains.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domains.com/privkey.pem; .... //other nginx configuration .... }