nginx 在我的不同域名之间混合缓存内容

nginx 在我的不同域名之间混合缓存内容

我不知道这是不是一个错误,或者我错误地定义了缓存,我有一个 nginx 缓存(反向代理)服务器,由 2 个不同的域名(mydomain1.commydomain2.com),内容不同,不是别名域名。

我定义了一个缓存,然后在 nginx 中定义了两个域/虚拟主机并将其设置为使用该缓存,两个域都从同一个源服务器获取数据,但它们将不同的虚拟主机传递给源服务器,以便它们获取正确的内容。

问题是 nginx 似乎在两个服务器上混合了缓存,访问一个主页会显示另一个服务器的缓存主页。

我是否需要为每个虚拟主机定义单独的缓存?

NGINX 是否也应该将 vhost 与每个请求关联?它似乎仅关联源服务器、端口等。

这是缓存主页的头部,显示两个虚拟主机之间没有任何区别:

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

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

在源服务器(apache)上,我的 2 个 vhost 定义如下:


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


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

答案1

像个怪人一样回答我自己的问题;

为了让 nginx 能够区分两个 url 使用的相同路径(例如/),它需要使用proxy_cache_key,通过默认似乎是$scheme$proxy_host$request_uri,这在我的例子中不起作用,当两个 nginx 域从同一源服务器获取数据(通过发送不同的主机头)时,它们会两个都最终使用这样的密钥:

KEY: http://source.example.com:81 (我理解 $proxy_host = 源服务器)

解决方案:指定包括proxy_cache_key当前的$host,不包括$proxy_host

proxy_cache_key $scheme://$host$request_uri;

相关内容