Nginx mischt zwischengespeicherte Inhalte zwischen meinen verschiedenen Domänen

Nginx mischt zwischengespeicherte Inhalte zwischen meinen verschiedenen Domänen

Ich weiß nicht, ob das ein Fehler ist oder ob ich den Cache falsch definiere. Ich habe einen Nginx-Cache-Server (Reverse-Proxy), der von 2andersDomänen ( mydomain1.comund mydomain2.com), anderer Inhalt, keine Aliasdomäne.

Ich habe einen einzelnen Cache definiert, dann die beiden Domänen/vHosts in Nginx definiert und die Verwendung dieses Caches eingerichtet. Beide Domänen beziehen ihre Daten vom selben Quellserver, übergeben aber unterschiedliche vHosts an den Quellserver, damit sie den richtigen Inhalt übernehmen.

Das Problem besteht darin, dass Nginx den Cache auf den beiden Servern zu mischen scheint. Beim Zugriff auf eine Homepage wird die zwischengespeicherte Homepage der anderen angezeigt.

Muss ich für jeden virtuellen Host einen separaten Cache definieren?

Sollte NGINX nicht auch jeder Anfrage einen virtuellen Host zuordnen? Es scheint nur einen Quellserver, Port usw. zuzuordnen.

Dies ist der Kopf der zwischengespeicherten Homepage und zeigt, dass es zwischen den beiden virtuellen Hosts keinen Unterschied gibt:

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

Meine NGINX-Cache-Einstellungen:

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;
    }
}

und auf dem Quellserver (Apache) habe ich meine 2 virtuellen Hosts wie folgt definiert:


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


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

Antwort1

Ich beantworte meine eigene Frage wie ein Spinner;

Damit nginx zwischen den gleichen Pfaden unterscheiden kann, die von zwei URLs verwendet werden (z. B. /), muss es verwenden proxy_cache_key, wasStandardscheint zu sein $scheme$proxy_host$request_uri, das funktioniert in meinem Fall nicht, wenn zwei Nginx-Domänen Daten vom gleichen Quellserver nehmen (durch Senden eines anderen Host-Headers), würden siebeideSie verwenden am Ende einen Schlüssel wie diesen:

KEY: http://source.example.com:81 (Ich verstehe, dass $proxy_host = Quellserver ist)

Lösung:angebenein , proxy_cache_keydas das aktuelle einschließt $host, nicht $proxy_host;

proxy_cache_key $scheme://$host$request_uri;

verwandte Informationen