
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.com
y 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_uri
esto 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_key
que incluye la corriente $host
, no $proxy_host
;
proxy_cache_key $scheme://$host$request_uri;