varnish의 기본 가상 호스트 지정

varnish의 기본 가상 호스트 지정

저는 Scientific Linux 6.4(64비트)에서 Varnish-3.0.5를 사용하고 있습니다.

$ rpm -q varnish
varnish-3.0.5-1.el5.centos.x86_64
$ cat /etc/redhat-release 
Scientific Linux release 6.4 (Carbon)
$ uname -a
Linux XXX.XXX.XXX 2.6.32-358.23.2.el6.x86_64 #1 SMP Wed Oct 16 11:13:47 CDT 2013 x86_64 x86_64 x86_64 GNU/Linux
$ curl XXX.XX.XX.XXX

<html>
<head>
  <title>Page Unavailable</title>
  <style>
    body { background: #303030; text-align: center; color: white; }
    #page { border: 1px solid #CCC; width: 500px; margin: 100px auto 0; padding: 30px; background: #323232; }
    a, a:link, a:visited { color: #CCC; }
    .error { color: #222; }
  </style>
</head>
<body onload="setTimeout(function() { window.location = '/' }, 5000)">
  <div id="page">
    <h1 class="title">Page Unavailable</h1>
    <p>The page you requested is temporarily unavailable.</p>
    <p>We're redirecting you to the <a href="/">homepage</a> in 5 seconds.</p>
    <div class="error">(Error 503 Service Unavailable)</div>
  </div>
</body>
</html>
$ 

IP 주소에 대해 Error 503 Service Unavailable실행할 때마다 내 백엔드 중 하나 이상이 다운 되는 경우 기본 가상 호스트를 구성할 수 있는 방법을 찾으려고 노력하고 있습니다 . 503 수신을 중단하려면 내부에도 curlIP 주소를 지정해야 합니까 ? 아니면 어떤 가상 호스트가 기본값인지 어떻게 지정합니까?req.http.hostvcl_recv()

답변1

우선 실제 VCL 구성을 보지 않고서는 조언을 제공하기가 매우 어렵다는 점을 말씀드리고 싶습니다.

실제 질문에 답변하려면

의 시작 부분에 기본 호스트를 설정할 수 있습니다 vcl_recv. 백엔드는 정확한 호스트에 응답하도록 구성되어야 합니다.

sub vcl_recv {
  /* set a default host if no host is provided on the request or if it is empty */
  if ( ! req.http.host 
    || req.http.host == "") {
    set req.http.host = "your.default.host.tld";
  }
  # ...

}

내 생각에 IP를 망칠 필요는 없고 req.http.host컬을 사용하여 호스트 헤더를 바니시로 전달하는 것이 좋습니다(예: curl -H "Host: your.default.host.tld" http://XX.XX.XX.XXX/).


주제에 대한 몇 가지 일반적인 제안 사항:

VCL에 오작동하는 제어 로직 추가 [1]

백엔드를 올바르게 설정하고 있나요?

VCl 로직에서 다른 것을 사용하라는 지시가 없는 한 varnish는 "기본" 백엔드(또는 디렉터)를 사용한다는 점을 기억하십시오.

상태 프로브를 추가하고 어떤 백엔드가 실패하는지 확인하세요.

일관된 상태 프로브를 사용하고 [2] 명령줄 명령을 사용하여 varnishadm debug.health더 잘 이해하려면 문서를 참조하세요. [3]

VLC 오류에 다시 시작 논리를 추가하세요.

이 같은

sub vcl_error {
  # ...

  /* Try to restart request in case of failure */
  if (obj.status == 503 && req.restarts < 5) {
    set obj.http.X-Restarts = req.restarts;
    return(restart);
  }

  # Before any deliver
  return (deliver);
}

VLC 오류 합성 응답에 디버그 로직을 추가하세요.

vcl_fetch백엔드 오류 코드를 광택 오류 응답에 전달할 때 디버그 헤더를 추가할 수 있다는 점을 기억하세요 .

sub vcl_fetch {
  # ...

  set beresp.http.X-Debug-Backend-Code = beresp.status;

  # ...
}
sub vcl_error {
  # ...

  synthetic {""
  # Insert the following at the end of your current response
  <p>Backend Status code was "} + obj.http.X-Debug-Backend-Code + {"</p>
    </body>
  </html>
  "};

  # ...

  return (deliver);
}

[1]https://www.varnish-cache.org/docs/3.0/tutorial/handling_misbehaving_servers.html

[2]https://www.varnish-cache.org/docs/3.0/reference/vcl.html#backend-probes

[삼]https://www.varnish-cache.org/trac/wiki/BackendPolling#CLIcommands

관련 정보