linux – Custom VCL防止清漆启动

操作系统:CentOS 6(x86_64)

我已经安装并配置了varnish但是它现在无法启动.

# service varnish restart
Stopping Varnish Cache:                                    [FAILED]
Starting Varnish Cache:                                    [FAILED]

我已将此错误缩小到在/etc/varnish/default.vcl中包含另一个VCL文件.

我像这样包括VCL:

include "/etc/varnish/domains/playwithbits.vcl";

如果我清空playwithbits.vcl的内容,那么varnish就可以启动了,但是一旦添加内容就会失败.

我的playwithbits.vcl的内容是:

backend playwithbits {
     .host = "localhost";
     .port = "8080";
}
acl purge {
     if (req.http.Host ~ "playwithbits.com") {
          "localhost";
     }
}
sub vcl_recv {
     if (req.http.Host ~ "playwithbits.com") {
          set req.backend = playwithbits; 
          if (req.request == "PURGE") {
               if (!client.ip ~ purge) {
                    error 405 "Not allowed.";
               }
               return(lookup);
          }
          if (req.url ~ "^/$") {
               unset req.http.cookie;
          }
     }
}
sub vcl_hit {
     if (req.http.Host ~ "playwithbits.com") {
          if (req.request == "PURGE") {
               set obj.ttl = 0s;
                    error 200 "Purged.";
          }
     }
}
sub vcl_miss {
     if (req.http.Host ~ "playwithbits.com") {
          if (req.request == "PURGE") {
               error 404 "Not in cache.";
          } 
          if (!(req.url ~ "wp-(login|admin)")) {
               unset req.http.cookie;
          }
          if (req.url ~ "^/[^?]+.(jpeg|jpg|png|gif|ico|js|css|txt|gz|zip|lzma|bz2|tgz|tbz|html|htm)(\?.|)$") {
               unset req.http.cookie;
               set req.url = regsub(req.url,"\?.$","");
          }
          if (req.url ~ "^/$") {
               unset req.http.cookie;
          }
     }
}
sub vcl_fetch {
     if (req.http.Host ~ "playwithbits.com") {
          if (req.url ~ "^/$") {
               unset beresp.http.set-cookie;
          }
          if (!(req.url ~ "wp-(login|admin)")) {
               unset beresp.http.set-cookie;
          }
     }
}

这是#strace -e trace =文件服务清漆启动的输出

execve("/sbin/service",["service","varnish","start"],[/* 20 vars */]) = 0
access("/etc/ld.so.preload",R_OK)      = 0
open("/etc/ld.so.preload",O_RDONLY)    = 3
open("/etc/ld.so.cache",O_RDONLY)      = 3
open("/lib64/libtinfo.so.5",O_RDONLY)  = 3
open("/lib64/libdl.so.2",O_RDONLY)     = 3
open("/lib64/libc.so.6",O_RDONLY)      = 3
open("/dev/tty",O_RDWR|O_NONBLOCK)     = 3
open("/usr/lib/locale/locale-archive",O_RDONLY) = 3
open("/proc/meminfo",O_RDONLY)         = 3
stat("/etc/varnish",{st_mode=S_IFDIR|0755,st_size=4096,...}) = 0
stat(".",...}) = 0
open("/usr/lib64/gconv/gconv-modules.cache",O_RDONLY) = 3
open("/sbin/service",O_RDONLY)         = 3
open("/etc/init.d/functions",O_RDONLY) = 3
--- SIGCHLD (Child exited) @ 0 (0) ---
stat("/etc/sysconfig/i18n",{st_mode=S_IFREG|0644,st_size=47,...}) = 0
open("/dev/null",O_WRONLY|O_CREAT|O_TRUNC,0666) = 3
open("/etc/profile.d/lang.sh",O_RDONLY) = 3
stat("/root/.i18n",0x7fff831f79e0)     = -1 ENOENT (No such file or directory)
stat("/etc/sysconfig/init",st_size=1153,...}) = 0
open("/etc/sysconfig/init",O_RDONLY)   = 3
open("/usr/share/locale/locale.alias",O_RDONLY) = 3
open("/usr/share/locale/en_US.UTF-8/LC_MESSAGES/initscripts.mo",O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US.utf8/LC_MESSAGES/initscripts.mo",O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en_US/LC_MESSAGES/initscripts.mo",O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.UTF-8/LC_MESSAGES/initscripts.mo",O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en.utf8/LC_MESSAGES/initscripts.mo",O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/en/LC_MESSAGES/initscripts.mo",O_RDONLY) = -1 ENOENT (No such file or directory)
--- SIGCHLD (Child exited) @ 0 (0) ---
--- SIGCHLD (Child exited) @ 0 (0) ---
chdir("/")                              = 0
stat("/etc/init.d/varnish",{st_mode=S_IFREG|0755,st_size=2837,...}) = 0
stat("/sbin/env",0x7fff831f8960)       = -1 ENOENT (No such file or directory)
stat("/usr/sbin/env",0x7fff831f8960)   = -1 ENOENT (No such file or directory)
stat("/bin/env",st_size=23832,...}) = 0
stat("/bin/env",...}) = 0
access("/bin/env",X_OK)                = 0
stat("/bin/env",R_OK)                = 0
stat("/bin/env",R_OK)                = 0
Starting Varnish Cache:                                    [FAILED]
--- SIGCHLD (Child exited) @ 0 (0) ---

有谁知道这个问题是什么?

解:

问题在于以下块:

acl purge {
         if (req.http.Host ~ "playwithbits.com") {
              "localhost";
         }
    }

acl purge只能将字符串作为值,因此如果无效.替换为:

acl purge {
        "localhost";
        }

它就像一个魅力.

解决方法

使用良好的配置启动清漆(default.vcl?),然后尝试在加载VCL之前对其进行语法检查.在清漆v2.1中(假设在3.x中类似):
$varnishadm -T 127.0.0.1:6082 

vcl.load error <path_to_your_vcl>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


查找全部容器的日志文件 $ sudo find /var/lib/docker/containers -name *.log 查看日志位置 $ docker inspect --format=&#39;{{.LogPath}}&#39; &lt;container_name&gt; 实时查询内容 $
Linux日志文件中列属性的详细解析
在Linux系统中没有duf命令,如何有效地管理磁盘空间?
深入探讨EncryptPad在Linux操作系统中的功能和优势
原理和应用场景:Linux中ttyload工具的工作原理和实际用途
深度解析SELinux的三种策略类型
评估Linux系统性能的ttyload工具使用效果
分享在Linux系统中检测SSH版本的方法
介绍Linux平台上的数据加密工具EncryptPad
在Linux系统中,如何查看和诊断块设备信息?
在Linux环境下如何查看块设备信息?
探索Linux操作系统下的数据加密工具EncryptPad
学会在Linux系统中查看硬盘信息
分析SELinux:原理与实践
掌握SELinux策略类别
技巧:有效解读和管理Linux日志文件
查看Linux系统中的所有用户
了解Linux系统中各种不同类型的日志文件
深入理解Linux PS命令
方法:在Linux操作系统中查看用户