Varnish 错误 503 后端获取失败仅在主页上(Magento 2.3.5-p1)

Varnish 错误 503 后端获取失败仅在主页上(Magento 2.3.5-p1)

我有点困惑,实际上非常困惑,不是关于 varnish 及其配置。目前我在 Nginx/PHP-FPM 上运行 Magento 2,并且只使用 SSL,即我将用户从 :80 重定向到 :443,因为我只希望他们通过 SSL 访问。此外,现在 Magento 2 已配置为 Redis 上的 cache/page_cache 和会话(在本地服务器上设置)。但是,我想使用 varnish 进行页面缓存。

1)为此,我想安装通过docker安装varnish使用给定的图像。我导出了从 Magento Admin 生成的 default.vcl 文件并将其放入/etc/varnish/default.vcl并使用以下命令:

docker run -e VARNISH_CONFIG_FILE=/etc/varnish/default.vcl
--restart except-stopped
-v /etc/varnish/default.vcl:/etc/varnish/default.vcl
-Pit --name=varnish-alpine thiagofigueiro/varnish-alpine-docker

然而,在default.vcl我配置的文件中.port = 6085,Varnish 却开始监听端口32768。看起来它没有读取我的default.vcl文件。

2. 目前 Nginx 正在监听80443,如果我用80:80它运行 varnish,docker 日志中会出错Address already in use。我想运行 varnish port 6085,让 magento 在这个端口上缓存页面。但从我的研究来看,似乎我必须在端口 80 上运行 varnish,然后我的网站监听其他端口,并将端口 80 上的流量重定向到网站端口(代理)。我说的对吗?因此,Web 服务器(Nginx)实际上将在端口 8080(用于 HTTP)和 8082(用于 HTTPS)上运行,并且这些端口将仅在(localhost)内开放,而不会向公众开放。但那么 varnish 将如何在端口 443 上通信呢?

我是否可以在单独的服务器上安装 varnish?或者 varnish 应该与 Web 服务器安装在同一台服务器上。

如果我可以在单独的服务器上安装 varnish,那么如何使它与 nginx(在不同的服务器上)一起工作。

标题: 更改标题以反映下面给出的更新问题。

更新:

好的,我可以让 varnish 工作,但是它在www.domain.com(主页)上给出“错误 503 后端获取失败”,但是在任何子文件夹或页面上都可以正常工作,例如www.domain.com/index.php

  • 现在我的 Nginx 配置已配置为将 重写/index.php//。没有 Varnish,它工作正常,但在 Varnish 上domain.com/index.php/运行良好,但domain.com出现错误。

清漆日志为/

 << Request  >> 33
-   Begin          req 32 rxreq
-   Timestamp      Start: 1594304417.447698 0.000000 0.000000
-   Timestamp      Req: 1594304417.447698 0.000000 0.000000
-   VCL_use        boot
-   ReqStart       1.1.0.1 47738 a0
-   ReqMethod      GET
-   ReqURL         /
-   ReqProtocol    HTTP/1.0
-   ReqHeader      Host: www.domain.com
-   ReqHeader      X-Real-IP: 162.158.155.131
-   ReqHeader      X-Forwarded-For: x.x.x.x, 162.158.155.131
-   ReqHeader      X-Forwarded-Proto: https
-   ReqHeader      X-Forwarded-Port: 443
-   ReqHeader      Connection: close
-   ReqHeader      Accept-Encoding: gzip
-   ReqHeader      CF-IPCountry: 
-   ReqHeader      CF-RAY: 5b02af62b8a4ca78-
-   ReqHeader      CF-Visitor: {"scheme":"https"}
-   ReqHeader      accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
-   ReqHeader      user-agent: 
-   ReqHeader      accept-language: en-us
-   ReqHeader      cookie: PHPSESSID=; 
-   ReqHeader      CF-Request-ID: 03d58bf1af0c200000001
-   ReqHeader      CF-Connecting-IP: x.x.x.x
-   ReqHeader      CDN-Loop: cloudflare
-   ReqUnset       X-Forwarded-For: x.x.x.x, 162.158.155.131
-   ReqHeader      X-Forwarded-For: x.x.x.x, 162.158.155.131, 1.1.0.1
-   VCL_call       RECV
-   ReqHeader      grace: none
-   ReqURL         /
-   ReqUnset       Accept-Encoding: gzip
-   ReqHeader      Accept-Encoding: gzip
-   VCL_return     hash
-   VCL_call       HASH
-   VCL_return     lookup
-   VCL_call       MISS
-   VCL_return     fetch
-   Link           bereq 34 fetch
-   Timestamp      Fetch: 1594304417.448049 0.000351 0.000351
-   RespProtocol   HTTP/1.1
-   RespStatus     503
-   RespReason     Backend fetch failed
-   RespHeader     Date: Thu, 09 Jul 2020 14:20:17 GMT
-   RespHeader     Server: Varnish
-   RespHeader     content-type: text/html; charset=utf-8
-   RespHeader     Retry-After: 5
-   RespHeader     X-Varnish: 33
-   RespHeader     Age: 0
-   RespHeader     Via: 1.1 varnish (Varnish/6.4)
-   VCL_call       DELIVER
-   RespUnset      Age: 0
-   RespHeader     Pragma: no-cache
-   RespHeader     Expires: -1
-   RespHeader     Cache-Control: no-store, no-cache, must-revalidate, max-age=0
-   RespUnset      Server: Varnish
-   RespUnset      X-Varnish: 33
-   RespUnset      Via: 1.1 varnish (Varnish/6.4)
-   VCL_return     deliver
-   Timestamp      Process: 1594304417.448084 0.000386 0.000035
-   Filters
-   RespHeader     Content-Length: 279
-   RespHeader     Connection: close
-   Timestamp      Resp: 1594304417.448153 0.000455 0.000068
-   ReqAcct        1428 0 1428 264 279 543
-   End

*   << Session  >> 32
-   Begin          sess 0 HTTP/1
-   SessOpen       1.1.0.1 47738 a0 1.1.0.4 80 1594304417.447629 23
-   Link           req 33 rxreq
-   SessClose      REQ_CLOSE 0.001
-   End

我已经将以下参数添加到 varnish 中,但错误仍然存​​在。

-p http_resp_hdr_len=65536
-p http_resp_size=98304

更新: 这些是我的 nginx 和 varnish 配置文件。

nginx.conf: https://pastebin.com/raw/tQ9wAmEP

默认.vcl:https://pastebin.com/raw/JmE5fncy

答案1

根据当前配置,Varnish 会捕获对 http:// domain.com/ 的请求。Varnish 将此请求传输到 localhost:8080,Nginx 正在监听该请求。Nginx(不知道 domain.com,因此使用默认服务器配置,即第一个)会将请求重定向到 https://www.example.com。当浏览器尊重这一点时,第二个请求由 Nginx 本身处理,它将此请求 proxy_passes 到 http://127.0.0.1:80,Varnish 正在监听该请求。从头开始重新启动。

相关内容