【问题标题】:Varnish on default port 6081默认端口 6081 上的清漆
【发布时间】:2018-11-16 17:10:19
【问题描述】:

我想尝试一个 Varnish 配置,它在默认端口 6081 上进行侦听,而 Apache 保持在 80 上。这个想法来自 blog about varnish

iptables 重定向然后将所有 80 流量发送到 6081。这样做使我能够继续使用我的 Web 控制面板而不会破坏它(该面板在 8080 本身上运行,并且在 Apache 的侦听更改时也会中断)。

现在我正在对服务器进行全新安装,只安装了 Apache 和 Varnish,只是想看看它是否可以正常工作。我可以让 Varnish 启动并运行:

curl -I 192.168.0.1:6081

但是,即使 iptable 规则已启动并正在运行,它也不能单独在 IP 上工作。以下是我显然使用虚拟 ip 192.168.0.1 的结果和设置

iptables -L -t nat

Chain PREROUTING (policy ACCEPT)
target     prot opt source      destination         
REDIRECT   tcp  --  anywhere    anywhere       tcp dpt:http redir ports 6081

IP 表规则 --(来自here

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j REDIRECT --to-port 6081

curl -I 使用端口 6081 的结果

curl -I http://192.168.0.1:6081
HTTP/1.1 200 OK
Date: Wed, 06 Jun 2018 21:45:20 GMT
Server: Apache/2.4.25 (Debian)
Last-Modified: Wed, 06 Jun 2018 21:08:27 GMT
Vary: Accept-Encoding
Content-Type: text/html
X-Varnish: 2
Age: 0
Via: 1.1 varnish (Varnish/6.0)
ETag: W/"29cd-56dff9168052e-gzip"
Accept-Ranges: bytes
Connection: keep-alive

curl -I 没有端口的结果

curl -I http://192.168.0.1
HTTP/1.1 200 OK
Date: Wed, 06 Jun 2018 21:36:49 GMT
Server: Apache/2.4.25 (Debian)
Last-Modified: Wed, 06 Jun 2018 21:08:27 GMT
ETag: "29cd-56dff9168052e"
Accept-Ranges: bytes
Content-Length: 10701
Vary: Accept-Encoding
Content-Type: text/html

/etc/default/varnish

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

/etc/varnish/default.vcl

# Default backend definition. Set this to point to your content server.
backend default {
    .host = "127.0.0.1";
    .port = "80";

我错过了什么? Apache 在 80,Varnish 在 6081,80 流量被重定向到 Varnish 正在监听的 6081。

【问题讨论】:

    标签: varnish varnish-vcl


    【解决方案1】:

    为什么会这样?

    在我看来,您应该在 80 端口和 apache 上的两个站点上使用 varnish,比如说:8080 和:8081。

    APACHE>设置 2 个虚拟主机
    Site1> 在端口 8080 上播放您的面板
    Site2> 在端口 8081 上播放您的网站

    清漆>
    为您的面板设置 BackEnd1
    为您的网站设置 BackEnd2
    一个在 8080 用于您的网络面板 和一个在即 8081 实际站点
    告诉后端1“面板”的清漆将所有内容传递给后端1 8080(所以清漆只会将您传递给apache)
    告诉后端 2“站点”的 varnish 为 8081 缓存您喜欢的任何内容


    所以,几句话。
    面板由清漆提供并将所有内容传递给 Apache 从 varnish 提供的站点,您可以在其中应用缓存规则命中/未命中等。
    请记住更改 /etc/default/varnish 并将其设置在端口 80 上。
    PS:从来没有将这个应用到 Varnish/Apache 的组合上,而是在 Varnish/nginx 上完成的。 您应该检查 apache 是否能够做到这一点。我怀疑他不能.....

    【讨论】:

      【解决方案2】:

      我不确定我是否完全掌握了这里的问题。为什么要从 80 重定向到 6081?

      默认情况下,Varnish 会暴露在 6081 下,这主要是为了不和 80 等流行端口下运行的其他现有服务发生冲突。

      鉴于您的设置,我会反过来做。我会在端口 80 下启动 Varnish,在 6081 下启动 Apache(或任何其他端口 - 我假设 8089 更进一步),当然要确保将 Apache 设置为 Varnish 的正确后端。

      毕竟,它是您想要在前面接受热量的代理。

      例如:

      /etc/varnish/default.vcl

      backend default {
          .host = "127.0.0.1";
          .port = "8089"; # I will assume Apache runs under 8089.
      }
      

      因此,是这样的:

      $ curl -is http://127.0.0.1/foo/bar
      

      首先会点击 Varnish,然后 Varnish 会尝试通过询问其后端(上面定义的 Apache)来满足请求。

      话虽如此,您可以禁用80到6081的重定向。

      【讨论】:

        【解决方案3】:

        让我看看我是否可以帮助解决这个问题。因此,您只想与您的 Web 服务器并行尝试 Varnish,以便您可以尝试一下。如果是这样的话,那就不是问题了。

        首先,端口 6081 用于 Varnish 的管理功能。您可以通过此端口远程执行大量操作。

        假设您的网络服务器在端口 80 上,您可以将 Varnish 服务器配置为:8080,您可以将 /etc/varnish 配置设置为链接:

        NFILES=131072
        MEMLOCK=82000
        RELOAD_VCL=1
        VARNISH_VCL_CONF=/etc/varnish/mysite.vcl
        VARNISH_LISTEN_PORT=8080
        VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1
        VARNISH_ADMIN_LISTEN_PORT=6082
        VARNISH_SECRET_FILE=/etc/varnish/secret
        VARNISH_MIN_THREADS=100
        VARNISH_MAX_THREADS=8000
        VARNISH_THREAD_TIMEOUT=240
        VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin
        VARNISH_STORAGE_SIZE=12G
        #VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}"
        VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}"
        VARNISH_TTL=120
        DAEMON_OPTS="-a ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} \
                     -f ${VARNISH_VCL_CONF} \
                     -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT} \
                     -t ${VARNISH_TTL} \
                     -w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT} \
                     -u varnish -g varnish \
                     -S ${VARNISH_SECRET_FILE} \
                     -s ${VARNISH_STORAGE}"
        

        然后,在您的“mysite.vcl”配置中,您可以将 varnish 链接到您的网站:

        backend webserver {         # Define one backend
          .host = "127.0.0.1";    # IP or Hostname of backend
          .port = "80";           # Port for backend listener (Apache, NGINX, etc.)
        

        然后只需设置您的 IP 表以接受 8080 和 80 的流量,您就可以在 :8080 上测试 Varnish 和在 :80 上独立测试 Web 服务器。顺便说一句,您不应该将管理端口(6081、6082 等)暴露在外部。

        如果您决定使用 Varnish,您可以将它放在您的 Web 服务器前面。将 varnish 侦听端口设置为 80,将您的 Web 服务器设置为 8080 或任何其他端口(如果它们位于同一服务器上)。如果它们是不同的服务器,您可以将您的 Web 服务器端口保留为 80,只需将其拉出防火墙,这样就无法直接从外界联系到它。

        祝你好运!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-04-23
          • 2015-06-27
          • 1970-01-01
          • 1970-01-01
          • 2016-07-28
          • 2010-09-14
          • 1970-01-01
          相关资源
          最近更新 更多