Configurar varios sitios con Barniz


Tenemos un servidor que necesita servir múltiples dominios a través de varnish, p. ej. example1.com, example2.com y example3.com

Nuestra corriente .el archivo vcl se ve así:

sub vcl_recv {
  set req.http.Host = "example1.com";    
  lookup;
}

Cómo establezco el req correcto.http.Host para la solicitud entrante correcta?

Author: cherouvim, 2010-07-26

4 answers

Puede soportar múltiples dominios frontend de esta manera:

 backend example1 {
     .host = "backend.example1.com";
     .port = "8080";
 }
 backend example2 {
      .host = "backend.example2.com";
      .port = "8080";
 }
 sub vcl_recv {
    if (req.http.host == "example1.com") {
        #You will need the following line only if your backend has multiple virtual host names
        set req.http.host = "backend.example1.com";
        set req.backend = example1;
        return (lookup);
    }
    if (req.http.host == "example2.com") {
        #You will need the following line only if your backend has multiple virtual host names
        set req.http.host = "backend.example2.com";
        set req.backend = example2;
        return (lookup);
    }
 }
 82
Author: Cristian Vidmar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-30 17:07:13

Estoy usando una configuración similar a la de Cristian, pero en las cláusulas if hago coincidir req.http.host contra expresión regular:

#for www.example.com or example.com
if (req.http.host ~ "^(www\.)?example\.com$") {
        set req.backend = example_com;
        return (lookup);
}

#with any subdomain support
if (req.http.host ~ "^(.*\.)?example2\.com$") {
        set req.backend = example2_com;
        return (lookup);
}

¡No olvides configurar los backends apropiadamente!

 24
Author: msurovcak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-03 14:38:14

No se puede agregar comentario así que aquí vamos

Ligera modificación para el barniz 4

#for www.example.com or example.com
if (req.http.host ~ "^(www\.)?example\.com$") {
        set req.backend_hint = example_com;
        return (lookup);
}

#with any subdomain support
if (req.http.host ~ "^(.*\.)?example2\.com$") {
        set req.backend_hint = example2_com;
        return (lookup);
}

Reemplazar motor con backend_hint

 6
Author: hyena,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-02 05:35:39

Me gustaría añadir un poco más de detalle a los mensajes de Cristian Vidmar y msurovcak

El " (req.http.host == "example1.com") " Patrón:

Hemos utilizado el patrón descrito para alojar de decenas a cientos de sitios por servidor.

Puede continuar con reglas personalizadas específicas del sitio a lo largo de toda su configuración (vcl_fetch/vcl_backend_response, vcl_hash, etc.) utilizando

if (req.http.host == "example1.com") {

Ejemplo donde sea necesario.

Combine esto con una plantilla motor para permitir que las configuraciones específicas del cliente se gestionen a través de archivos individuales que contienen su propia lógica (todos envueltos con bloques if específicos de su sitio para aislar el código).

Luego incluye cada bloque de sitio individual en el predeterminado.vcl usando:

include "/etc/varnish/www.example1.com.vcl";

Una mejora opcional para motores totalmente divididos:

Si está alojando sitios web totalmente diferentes, entonces dividir backends (y caché dividida) es una buena manera de hacerlo.

Si los sitios son similar (mismo código base/js/css / images) puede ser interesante ejecutar un dominio de recursos por ejemplo. resources.example.com que todos los sitios utilizan.

Luego puede tener una sola caché (y una tasa de visitas muy alta) en cada uno de los elementos comunes de varios sitios y aún mantener diferencias en los sitios www individuales.

Otra alternativa al uso de extremos traseros divididos:

Otra opción es dividir las instancias de Varnish a través de contenedores. Cada uno entonces se convierte en su propio aislado mundo que se gestiona (y vive y muere) individualmente. Esta puede ser una buena opción de seguridad y la sobrecarga de múltiples procesos es mínima en la infraestructura moderna.

Algunas ventajas de esto es que puede soportar diferentes versiones de Varnish y diferentes parámetros de inicio de Varnish por instancia.

Esto puede ser ideal para el registro individual, aprovechando los diferentes modos ESI por instancia y los ajustes de configuración de memoria/ajuste individuales.

Hacemos esto en www.section.io y también nos da la capacidad de ejecutar diferentes contenedores en diferentes ubicaciones geográficas o los mismos contenedores en diferentes ubicaciones para acercarse lo más posible a bases de usuarios geográficamente dispersas.

 4
Author: mattnthat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-06 02:36:16