nginx mezcla contenido en caché entre mis diferentes dominios

nginx mezcla contenido en caché entre mis diferentes dominios

No sé si esto es un error o estoy definiendo el caché incorrectamente. Tengo un servidor de caché nginx (proxy inverso) que utilizan 2diferentedominios ( mydomain1.comy mydomain2.com), contenido diferente, no un dominio de alias.

Definí un único caché, luego definí los dos dominios/vhosts en nginx y lo configuré para usar ese caché, ambos dominios toman sus datos del mismo servidor de origen, pero pasan el vhost diferente al servidor de origen para que tomen el contenido correcto.

El problema es que nginx parece mezclar el caché en los dos servidores, al acceder a una página de inicio se muestra la página de inicio almacenada en caché de la otra.

¿Necesito un caché separado definido para cada vhost?

¿No debería NGINX también asociar un vhost con cada solicitud? Parece simplemente asociar un servidor de origen, puerto, etc.

Este es el encabezado de la página de inicio almacenada en caché, lo que muestra que no hay nada que diferencie entre los dos vhosts:

KEY: http://source.example.com:81/
HTTP/1.1 200 OK
Date: Sun, 02 Feb 2020 00:54:33 GMT
Server: Apache/2.4.6 (CentOS) mpm-itk/2.4.7-04 OpenSSL/1.0.2k-fips PHP/5.4.16
X-Powered-By: PHP/5.4.16
Expires: Sun, 02 Feb 2020 02:54:33 GMT
Cache-Control: public, max-age=7200
X-Mod-Pagespeed: 1.13.35.2-0
Vary: Accept-Encoding

Mi configuración de caché de NGINX:

proxy_cache_path /ramdisk/nginx_cache levels=1:2 keys_zone=nginx_ramdisk_cache:512m max_size=3g
                     inactive=30d use_temp_path=off;



# defining domain 1
server {
    [...]
    server_name  mydomain1.com;

    location / {

            proxy_pass       http://source.example.com:81;

            proxy_set_header Host      mydomain1.com;

            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;

            proxy_cache             nginx_ramdisk_cache;
    }
}

# defining domain 2
server {
    [...]
    server_name  mydomain2.com;

    location / {

            proxy_pass       http://source.example.com:81;

            proxy_set_header Host      mydomain2.com;

            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;

            proxy_cache             nginx_ramdisk_cache;
    }
}

y en el servidor de origen (apache) tengo mis 2 vhosts definidos así:


<VirtualHost *:81>
     ServerName mydomain1.com
     DocumentRoot /var/www/html/mydomain1.com
</VirtualHost>


<VirtualHost *:81>
     ServerName mydomain2.com
     DocumentRoot /var/www/html/mydomain2.com
</VirtualHost>

Respuesta1

Respondiendo a mi propia pregunta como un bicho raro;

Para que nginx haga una diferencia entre las mismas rutas utilizadas por dos URL (por ejemplo /), necesita usar proxy_cache_key, que porpor defectoParece ser que $scheme$proxy_host$request_uriesto no funciona en mi caso, cuando dos dominios nginx toman datos del mismo servidor de origen (enviando un encabezado de host diferente), lo harían.ambosterminar usando una clave como esta:

KEY: http://source.example.com:81 (Entiendo que $proxy_host es = servidor de origen)

Solución:especificara proxy_cache_keyque incluye la corriente $host, no $proxy_host;

proxy_cache_key $scheme://$host$request_uri;

información relacionada