Tengo una certificación SSL comodín y estoy tratando de redirigir todo el tráfico que no es SSL a SSL. Actualmente estoy usando lo siguiente para redirigir la url no subdominiada que funciona bien.
server {
listen 80;
server_name mydomain.com;
#Rewrite all nonssl requests to ssl.
rewrite ^ https://$server_name$request_uri? permanent;
}
cuando hago lo mismo para * .midominio.com, lógicamente redirige a
https://%2A.mydomain.com/
¿Cómo redirige todos los subdominios a su equivalente https?
Respuestas:
Eso es todo...
fuente
$host
¿variable?$request_uri
?La documentación oficial de NGINX alienta a usar la directiva de retorno en lugar de usar la directiva de reescritura para efectuar la redirección. Esto es así, ya que la solicitud que se está reescribiendo no está destinada a ese servidor, pero aún se procesa en ese bloque de servidor. Por lo tanto, las redirecciones se realizan correctamente con una directiva de retorno, ya que se detiene todo el procesamiento y se envía una respuesta de inmediato. NGINX desalienta la reescritura para la redirección aquí: http://nginx.org/en/docs/http/converting_rewrite_rules.html
La sintaxis para la directiva de retorno es: URL del código de retorno; Como originalmente estaba haciendo una reescritura permanente, por lo tanto, puede usar 301 como el código para responder, lo que indica que es una redirección permanente. Su dirección https se pasará en la sección de URL. Referencia: http://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return
Entonces su configuración correcta sería
Esto probablemente le permitiría redirigir correctamente a su dominio ssl, con un bloqueo de servidor comodín. También puede probar el nombre de servidor genérico de subrayado '_' o $ host como se sugiere en el comentario anterior. ¡Haznos saber!
fuente
return
es generalmente mejor, la configuración sugerida no es correcta, ya que todavía usa $ server_name para la redirección, que será "* .midominio.com". La corrección correcta ya fue descrita por @cjc en el comentario anterior,$host
debe usarse en lugar de$server_name
.return 301 https://$host$request_uri;
return 301 https://$server_name$request_uri;
para que usen https en el puerto 443. El problema es que la URL redirigida todavía tiene el número de puerto original. 80 no es un problema, pero 8080 aparece comohttps://example.com:8080
Intenta algo como esto:
El truco es definir el servidor comodín y hacer redirecciones basadas en su nombre.
fuente