nginx subdominio reescribir

8

Otra pregunta sobre la regla de reescritura de nginx

¿Cómo puedo hacer una reescritura de http://www.*.domain.coma http://*.domain.com?

gracias por adelantado

- Deb

EDITAR:

Lo siento, no vi que el formato textil eliminó el * de mi pregunta. Lo arreglé ahora. Lo que necesito hacer es ir de www.joe.domain.com a joe.domain.com, donde joe podría ser cualquier palabra.

debutante
fuente

Respuestas:

7

¿Cuál es el significado del período extra antes de domain.com? ¿El objetivo es eliminar el www de la URL? Si es así, esto debería hacer el truco:

if ($host ~* www\.(.*)) {
  set $host_without_www $1;
  rewrite ^(.*)$ http://$host_without_www$1 permanent; # $1 contains '/foo', not 'www.mydomain.com/foo'
}

No olvides: sudo /etc/init.d/nginx restartcargarlo

Fuente: Wiki NGINX

iainlbc
fuente
Lo siento, no vi que el formato textil eliminó el * de mi pregunta. Lo que tengo que hacer es ir de www.joe.domain.com a joe.domain.com, donde joe podría ser cualquier palabra. En lo que tienes razón, solo necesito eliminar el www.
deb
12

Eso es bastante hack.

La forma más rápida de rendimiento sería

server {
  server_name www.domain.com;
  rewrite ^ http://domain.com$request_uri permanent;
}

Guarda una coincidencia de expresiones regulares, así como dos capturas, además de obtener la ventaja de que nginx utiliza tablas hash para buscar el bloque de servidor coincidente.

Además, no necesita reiniciar nginx: una recarga es todo lo que se requiere, y ¿quién querría tener más tiempo de inactividad del requerido?

Martin Fjordvald
fuente
+1 tiene sentido ... aplausos
iainlbc
1
Esto no es un truco. Nginx realiza una búsqueda muy rápida a través de los nombres de los servidores, por lo que este es realmente el enfoque más rápido.
Alexander Azarov
1
@Alaz Eso fue en respuesta a la respuesta proporcionada por iainlbc, quise decir que si la condición era un hack, no el servidor que busqué, recomendé.
Martin Fjordvald
1

La solución de Martin F está muy bien, hasta que tenga cientos de dominios. Sin embargo, sugeriría ir a otro lado: publique la aplicación en www.joe.domain.com y redirija desde joe.domain.com. Estoy bastante seguro de que está en un RFC.

Justin Alan Ryan
fuente
Si tiene nginx manejar tantos dominios, escriba un script para generar la configuración. Es un lenguaje de configuración bastante sencillo y realmente no desea realizar el análisis de expresiones regulares en cada carga de página en un servidor de alto tráfico.
Martin Fjordvald
En principio, tal vez, pero ¿lo has perfilado? He tenido algunos sitios de carga muy alta usando regex para todas las solicitudes. Se cuida. Además, muchos entornos de alojamiento compartido no tienen problemas serios de rendimiento, pero sí tienen problemas generales de administración. Ambas soluciones podrían funcionar bien dentro de diferentes parámetros.
Justin Alan Ryan
Si tiene cientos de dominios, use regexp en server_name: stackoverflow.com/questions/2498712/nginx-subdomain-rewrite
Alexander Azarov