apache - Varnish 缓存 : 1 server, 2IP,2 个网站

标签 apache varnish varnish-vcl

我有 1 台服务器,有 2 个 IP 地址:
eth0 = 1.2.3.4
eth0:0 = 5.6.7.8

/etc/hosts

127.0.0.1 localhost
1.2.3.4 domain1.com
5.6.7.8 domain2.net

在此服务器中,我使用以下配置(/etc/httpd/conf/httpd.conf)运行 Apache:
...
Listen 1.2.3.4:8080
Listen 5.6.7.8:8080
...
<VirtualHost 1.2.3.4:8080>
DocumentRoot /var/www/domain1.com/public_html
...
</VirtualHost>
<VirtualHost 5.6.7.8:8080>
DocumentRoot /var/www/domain2.net/public_html
...
</VirtualHost>

到目前为止一切顺利,我可以让我的网络服务器正常工作。

然后我安装了 Varnish Cache,参数如下:

/etc/sysconfig/Varnish
NFILES=131072
MEMLOCK=82000
NPROCS="unlimited"
RELOAD_VCL=1
VARNISH_LISTEN_PORT=80
DAEMON_OPTS="-a domain1.com:80 \
             -T domain1.com:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,256m"
DAEMON_OPTS="-a domain2.net:80 \
             -T domain2.net:6083 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,512m"

/etc/varnish/default.vcl
backend domain1 {
  .host = "1.2.3.4";
  .port = "8080";
}
backend domain2 {
  .host = "5.6.7.8";
  .port = "8080";
}
sub vcl_recv {
    if (req.http.host == "domain1.com") {
        set req.http.host = "domain1.com";
        set req.backend = domain1;
        return (lookup);
    }
    if (req.http.host == "domain2.net") {
        set req.http.host = "domain2.net";
        set req.backend = domain2;
        return (lookup);
    }
}

但我可以访问网站 domain2.net 但不能访问 domain1.com。

在查询我的服务器上监听的端口时,我可以注意到以下内容:
user@host# netstat -an | more
tcp        0      0 5.6.7.8:80              0.0.0.0:*                   LISTEN
tcp        0      0 5.6.7.8:8080            0.0.0.0:*                   LISTEN
tcp        0      0 1.2.3.4:8080            0.0.0.0:*                   LISTEN
tcp        0      0 5.6.7.8:6083            0.0.0.0:*                   LISTEN

有谁知道为什么 Varnish 忽略所有 1.2.3.4/domain1.com 配置?以及如何让它发挥作用?

提前致谢。

最佳答案

在您的 /etc/sysconfig/varnish ,您只需将变量 DAEMON_OPTS 写入两次,因此仅将第二组参数传递给 varnish 守护程序。但是既然你反正只使用一个 vcl 脚本,为什么要启动两个 varnish 守护进程呢?

两个 IP 上的一个守护进程都可以工作,因此您只需删除 DAEMON_OPTS 中的域部分,varnish 将监听所有接口(interface):

DAEMON_OPTS="-a :80 \
         -T localhost:6082 \
         -f /etc/varnish/default.vcl \
         -S /etc/varnish/secret \
         -s malloc,256m"

-T 用于管理界面。大多数情况下,您只希望可以从 localhost 访问它

关于apache - Varnish 缓存 : 1 server, 2IP,2 个网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19208258/

相关文章:

php - 取消设置 php 中的变量会影响缓存吗?

Apache/varnish 尾部斜杠与端口问题

php - Varnish 缓存+ PHP

php - 这个php代码有什么问题?

linux - 让 apache 只读取一个 php 文件

php - 在 mysql 数据库中存储唯一命中

Varnish VCL 检查 cookie 是否不存在

php - curl 错误 : No route to host

php - ISPConfig 3,忍者设置我的 open_basedir

php - apache + Varnish + nginx + ssl + wordpress将所有http流量重定向到https