configuration - tag - Configurar mĂșltiples sitios con barniz
etiqueta de titulo en html (4)
Estoy usando una configuración similar a la de Cristian, pero en las cláusulas if coincido con req.http.host contra la 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 te olvides de configurar los backends apropiadamente!
Tenemos un servidor que necesita servir dominios múltiples a través de barniz, por ejemplo, example1.com, example2.com y example3.com
Nuestro archivo .vcl actual se ve así:
sub vcl_recv {
set req.http.Host = "example1.com";
lookup;
}
¿Cómo configuro el Req.http.Host correcto para la solicitud entrante correcta?
Me gustaría agregar un poco más de detalle a las publicaciones de Cristian Vidmar y msurovcak
El patrón "(req.http.host ==" example1.com ")":
Hemos utilizado el patrón descrito para alojar decenas a cientos de sitios por servidor.
Puede continuar con las reglas personalizadas específicas del sitio en toda su configuración (vcl_fetch / vcl_backend_response, vcl_hash, etc.) utilizando el
if (req.http.host == "example1.com") {
ejemplo donde sea necesario.
Combine esto con un motor de plantillas para permitir que las configuraciones específicas del cliente se administren a través de archivos individuales que contienen su propia lógica (todo envuelto con sus bloques específicos del sitio para aislar el código).
A continuación, incluye cada bloque de sitio individual en default.vcl usando:
include "/etc/varnish/www.example1.com.vcl";
Una mejora opcional para backends totalmente divididos:
Si está alojando sitios web totalmente diferentes, dividir los backends (y el caché dividido) es una buena forma de hacerlo.
Si los sitios son similares (mismas bases de código / js / css / images) puede ser interesante ejecutar un dominio de recursos, por ejemplo. resources.example.com que usan todos los sitios.
Luego puede tener un solo caché (y una tasa de aciertos muy alta) en cada uno de los elementos comunes de varios sitios y aún así mantener las diferencias en los sitios www individuales.
Otra alternativa al uso de la parte posterior dividida:
Otra opción es dividir las instancias de Varnish a través de contenedores. Cada uno entonces se convierte en su propio mundo aislado que es administrado (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 admitir diferentes versiones de Varnish y diferentes parámetros de inicio de Varnish por instancia.
Esto puede ser ideal para el registro individual, aprovechando diferentes modos de ESI por instancia y la configuración individual de memoria / ajuste.
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 acercarnos lo más posible a las bases de usuarios geográficamente dispersas.
Puede admitir varios 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);
}
}
no se puede agregar un 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);
}
reemplace el backend con backend_hint