AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1001420
Accepted
adrianTNT
adrianTNT
Asked: 2020-02-02 17:38:26 +0800 CST2020-02-02 17:38:26 +0800 CST 2020-02-02 17:38:26 +0800 CST

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

  • 772

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

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

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

我需要为每个 vhost 定义一个单独的缓存吗?

NGINX 不应该也将虚拟主机与每个请求相关联吗?它似乎只是关联了一个源服务器、端口等。

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

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 个虚拟主机定义如下:


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


<VirtualHost *:81>
     ServerName mydomain2.com
     DocumentRoot /var/www/html/mydomain2.com
</VirtualHost>
apache-2.2 cache virtualhost nginx reverse-proxy
  • 1 1 个回答
  • 1083 Views

1 个回答

  • Voted
  1. Best Answer
    adrianTNT
    2020-02-02T19:00:42+08:002020-02-02T19:00:42+08:00

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

    为了让 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;
    
    • 1

相关问题

  • 阿帕奇的替代品

  • 如何强制我的网址始终以 www 开头?

  • 在 Linux Xen VPS 上优化 Apache 和 MySQL

  • mod_rewrite 不转发 GET 参数

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve