2017-09-08 2 views
0

vcl_synth에서 수정 된 오류 페이지를 수정하려고합니다. 이 문제를 vcl_backend_error로 옮길 수도 있지만 문제는 그대로 남습니다. CentOS 7을 사용하고 있으므로 4.0이 아니라 4.1에 액세스 할 수 있습니다. 이것은 std.file_exists가> = 4.1에 존재하기 때문에 중요합니다. 신뢰할 수없고 테스트되지 않은 소스의 패키지를 사용하여 전방/후방 호환성을 손상시키는 것은 용납되지 않습니다.Varnish 4에 설정된 'synthetic'변수는 무엇입니까?

503.html 파일이 존재하지 않을 수있는 문제를 처리하려면 합성 출력을 테스트하고 null/empty가 대체 오류 페이지를 생성하고 싶습니다. 디버깅을 위해 모든 출력을 syslog에 던지고 있습니다. 이것은 현재의 형태로 생산에 지속되지 않습니다.

샘플 : 나는 명확하게 resp.http.body이 비어 참조 위의와

sub vcl_synth { 
    if (resp.status == 503) { 
     set resp.http.Content-Type = "text/html; charset=utf-8"; 
     synthetic(std.fileread("/var/www/vhost/" + req.http.host + "/error/503.html")); 
     std.syslog(3, "resp.http.body: " + resp.http.body); 
     return (deliver); 
    } 
} 

하지만 페이지가 반환 및 브라우저에서 렌더링됩니다. 그렇다면 합성 변수는 어떤 변수를 설정합니까? 그리고, 그것을 테스트 할 수 있습니까?

# journalctl -f 
... 
Sep 08 02:17:17 REDACTED_HOSTNAME varnishd[32498]: resp.http.body: 

PLS는 resp.http.body을 채우지 않습니다 vcl_synth 동안 synthetic(...)

답변

1

실행 HALP. 이것은 임의의 헤더 이름입니다. 한 가지 가능한 방법은 응답 본문과 함께 '임시 변수'채우는 것 :에 관한

sub vcl_synth { 
    if (resp.status == 503) { 
     set resp.http.Content-Type = "text/html; charset=utf-8"; 
     set req.http.X-Synth-Body = std.fileread("/var/www/vhost/" + req.http.host + "/error/503.html"); 
     synthetic(req.http.X-Synth-Body); 
     std.syslog(3, "req.http.X-Synth-Body: " + req.http.X-Synth-Body); 
     return (deliver); 
    } 
} 
+0

나를 영감에 사로 잡았습니다. fileread를 변수로 설정 한 다음 변수를 테스트하여 null 대소 문자를 처리합니다. 작업 코드가있을 때 원래 게시물을 업데이트합니다. muchas gracias señor :) – Phil

1

을 :

그것은 앞으로 휴식 신뢰할 수없는, 검증되지 않은, 소스 에서 패키지를 사용하는 것이 용납/하위 호환성.

바니시는 dedicated repository for 4.1입니다.

해당 패키지는 서명 된 것으로, 4.1 분기에만 해당되며 정방향/역방향 호환성을 손상시키지 않아야합니다.

게다가 소프트웨어를 사용하고 있으므로 본질적으로 이미 신뢰하고 있습니다. 또한 최근 보안 업데이트로 인해 EPEL이 아닌 저장소에 더 빨리 작업 할 수 있습니다.

광택 V 4.0은 공식적으로 EOL입니다.

+0

고맙습니다. 앞으로 나올 최고의 솔루션이지만 테스트 및 검증이 필요합니다. 고맙게도 단기적으로 문제를 해결할 수있는 방법이 있다고 생각합니다. 플랫폼을 완벽하게 지원한다면 작성자 저장소가 반드시 있어야합니다. 제 3 자 repos, 일반적으로별로 .. .. :) – Phil

관련 문제