nginx misturando conteúdo em cache entre meus diferentes domínios

nginx misturando conteúdo em cache entre meus diferentes domínios

Não sei se isso é um bug ou estou definindo o cache incorretamente, tenho um servidor de cache nginx (proxy reverso) que é usado por 2diferentedomínios ( mydomain1.come mydomain2.com), conteúdo diferente, não um domínio de alias.

Eu defini um único cache, depois defini os dois domínios/vhosts no nginx e configurei-o para usar esse cache, ambos os domínios pegam seus dados do mesmo servidor de origem, mas passam o vhost diferente para o servidor de origem para que peguem o conteúdo correto.

O problema é que o nginx parece misturar o cache nos dois servidores, acessar uma página inicial mostra a página inicial em cache da outra.

Preciso de um cache separado definido para cada vhost?

O NGINX também não deveria associar um vhost a cada solicitação? Parece apenas associar um servidor de origem, porta, etc.

Este é o cabeçalho da página inicial em cache, mostrando que não há nada que diferencie entre os dois 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

Minhas configurações de cache 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;
    }
}

e no servidor de origem (apache) tenho meus 2 vhosts definidos assim:


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


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

Responder1

Respondendo minha própria pergunta como um estranho;

Para que o nginx faça a diferença entre os mesmos caminhos usados ​​por duas URLs (por exemplo /), ele precisa usar proxy_cache_key, que porpadrãoparece ser $scheme$proxy_host$request_uri, isso não funciona no meu caso, quando dois domínios nginx pegam dados do mesmo servidor de origem (enviando um cabeçalho de host diferente), eles iriamambosacabe usando uma chave como esta:

KEY: http://source.example.com:81 (Eu entendo que $ proxy_host é = servidor de origem)

Solução:especificamosa proxy_cache_keyque inclui a corrente $host, não $proxy_host;

proxy_cache_key $scheme://$host$request_uri;

informação relacionada