オペレーティングシステム: CentOS 6(x86_64)
ワニスをインストールして構成しましたが、起動できません。
# 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
の内容を空にすると、ニスを開始できますが、内容を追加するとすぐに失敗します。
私の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=file service varnish start
の出力です
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(".", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 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_mode=S_IFREG|0644, 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(".", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 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_mode=S_IFREG|0755, st_size=23832, ...}) = 0
stat("/bin/env", {st_mode=S_IFREG|0755, st_size=23832, ...}) = 0
access("/bin/env", X_OK) = 0
stat("/bin/env", {st_mode=S_IFREG|0755, st_size=23832, ...}) = 0
access("/bin/env", R_OK) = 0
stat("/bin/env", {st_mode=S_IFREG|0755, st_size=23832, ...}) = 0
stat("/bin/env", {st_mode=S_IFREG|0755, st_size=23832, ...}) = 0
access("/bin/env", X_OK) = 0
stat("/bin/env", {st_mode=S_IFREG|0755, st_size=23832, ...}) = 0
access("/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
は文字列のみを値として受け取ることができるため、if
は無効です。交換された:
acl purge {
"localhost";
}
そしてそれは魅力のように機能します。
適切な構成でニスを開始します(default.vcl
?)次に、VCLをロードする前に構文チェックを実行してみてください。ワニスv2.1の場合(3.xでも同様であると想定):
$ varnishadm -T 127.0.0.1:6082
vcl.load error <path_to_your_vcl>