Estoy usando nginx para administrar múltiples dominios para el proxy inverso.
Quiero redirigir todas las solicitudes de http a https
server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 301 https://$host$request_uri; }Sin embargo, no estoy seguro de cómo puedo hacer que funcione para reescribir solicitudes que no sean www para redirigir a www de manera genérica, excluyendo la reescritura de aquellas solicitudes que ya tienen www en las solicitudes, ya que si solo modifico la regla a continuación, crea un problema cuando alguien escribe como www. dominio.com se reescribe a www.www.dominio.com
server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 301 https://www.$host$request_uri; } Por favor revise esta imagen para entender el problema. 
Así que necesito tener alguna condición que maneje eso.
por favor intente esto
server { listen 80; listen [::]:80; server_name yourdomain.com www.yourdomain.com me.yourdomain.com; return 301 https://yourdomain.com$request_uri; }esto reescribirá los 3 dominios a https://yourdomain.com
No estoy seguro de mi respuesta. No puedo probar esto ahora. por favor intente esto y comente de nuevo
Si desea un enfoque genérico, puede usar la directiva de map (debe colocarse fuera del bloque del server ):
map $host $basename { ~^www\.(.+) $1; default $host; } server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 301 https://$basename$request_uri; }Actualización 1
Parece que leí mal su pregunta (debe redirigir example.com a www.example.com pero mi respuesta hace lo contrario), intente lo siguiente:
map $host $basename { ~^www\.(.+) $host; default www.$host; } server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 301 https://$basename$request_uri; }Actualización 2
OP hace una pregunta adicional:
¿Hay alguna manera de excluir un subdominio específico como
static.example.comque no quiero volver a escribir enwww.static.example.com?
Sí, se puede evitar la reescritura del subdominio static con el siguiente bloque de map :
map $host $basename { ~^(?:www|static)\..+ $host; default www.$host; }Si desea evitar la reescritura de cualquier nombre de dominio de tres componentes, puede utilizar
map $host $basename { ~[^.]+\.[^.]+\.[^.]+ $host; default www.$host; }Redirección de no www a www y https
Si entiendo correctamente, entonces quiere forzar que no www a www. Y desea forzar todas las solicitudes a https. Este código de configuración verifica si $host comienza con "www." O no. Si no es así, nginx agregará "www." antes de $host y luego devuelva la ubicación https correcta. Funcionará con subdominios también.
server { if ($host !~* ^www\.) { # if host name starts with (case insensitive) "www." return 301 https://www.$host$request_uri; } if ($host ~* ^www\. ) { # if host name doesn't start with (case insensitive) "www." return 301 https://$host$request_uri; } listen 80 default_server; listen [::]:80 default_server; server_name _; return 404; }Posiblemente mejor manera con Certbot
Puede producir automáticamente el código que necesita utilizando Certbot . También lo ayudará a administrar mucho los certificados y automatizar la renovación. Pero Certbot no cambiará no-www a www, tendrá que editar la configuración generada automáticamente para que se vea como la configuración anterior. La otra diferencia es que se espera que tenga diferentes bloques/archivos de configuración por dominio, pero no estoy seguro si es necesario. Así es como se ve la configuración predeterminada por dominio.
server { if ($host = www.yourdomain.com) { return 301 https://$host$request_uri; } # managed by Certbot if ($host = yourdomain.com) { return 301 https://$host$request_uri; } # managed by Certbot listen 80; listen [::]:80; server_name yourdomain.com www.yourdomain.com; return 404; # managed by Certbot }Creo que es una buena práctica separar los archivos de configuración para cada dominio y subdominio y usar el formato predeterminado de Certbot hasta que haya entendido más Nginx. De esta manera puedes deshabilitar la redirección de no-www a www muy fácilmente. El código predeterminado anterior de Certbot sería lo que pondría cuando no desea redirigir en ese caso. A largo plazo, esto tiene más sentido para mí, pero entiendo que cuando los usuarios se sientan más cómodos con www u otras partes del sitio web, es posible que necesiten www.