apache - 如何设置 Varnish 以与 Apache 和 Tomcat 一起工作

标签 apache tomcat varnish

我有一台 Ubuntu 12.0 服务器,在端口 80 上运行 Varnish 4,在 8080 上运行 Apache 2.4。 我安装了运行在端口 8181 上的 Tomcat 7,它只运行一个 Liferay 站点。 我想配置 Varnish 以与 Tomcat 一起工作。 我该如何设置? 我当前的设置是这样的:

/etc/default/varnish

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


/etc/varnish/default.vcl

backend default {
   .host = "123.456.789.000";
   .port = "8080";
   .connect_timeout = 580s;
   .first_byte_timeout = 580s;
   .between_bytes_timeout = 580s;
}

如果我将浏览器指向 123.456.789.000:8181,则 Tomcat 站点可以正常工作。我将使用我的 DNS 设置注册器以响应“www.mytomcatsite.com”,但如何避免 URL 上的“:8181”?

使用 Apache 一切正常。

TIA。

最佳答案

来自 Varnish 文档:

我们添加了一个新的后端。:

backend java {
    .host = "127.0.0.1";
    .port = "8000";
}

现在我们需要告诉 Varnish 将差异 URL 发送到哪里。让我们看看 vcl_recv。:

sub vcl_recv {
    if (req.url ~ "^/java/") {
        set req.backend_hint = java;
    } else {
        set req.backend_hint = default;
    }
}

如果你想在虚拟主机的基础上完成这个路由,你只需要检查 req.http.host:

sub vcl_recv {
    if (req.http.host ~ "foo.com") {
        set req.backend_hint = foo;
    } elsif (req.http.host ~ "bar.com") {
        set req.backend_hint = bar;
    }
}

参见:

注意:这是针对 Varnish 4 的。VCL 语法对于 Varnish 3 会略有不同。

关于apache - 如何设置 Varnish 以与 Apache 和 Tomcat 一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38212215/

相关文章:

linux - Apache配置帮助--为什么不同进程 "in"不同时区?

javascript - 使用 htaccess 重写 URL 时出现 404 错误 - AngularJS html5 模式

Varnish 504 网关超时

java - 为多个 war 文件配置 tomcat 类路径

php - Varnish 不适用于WooCommerce

plugins - 新的文物/Varnish 整合-如何显示二审?

apache - docker:尝试连接到已发布的端口时说连接被拒绝

django - request.META 不包含从curl -H 传递的 header

web-applications - 对于 Tomcat 6,我的 Web 应用程序的 context.xml 是否需要位于 $catalina_base/conf/中?

java - 主机上有多个 tomcat,如何重定向请求以便客户端只知道一个 tomcat