[显然我是以 root 身份运行 varnishd 的]
现在,我明白了:
[gideon@mywebsite ~]$ sudo varnishd -f /etc/varnish/default.vcl -s malloc,128m -T 127.0.0.1:2000 -a 0.0.0.0:8000 -d
[sudo] password for gideon:
Platform: Linux,2.6.32-358.6.2.el6.x86_64,x86_64,-smalloc,-smalloc,-hcritbit
200 284
-----------------------------
Varnish Cache CLI 1.0
-----------------------------
Linux,2.6.32-358.6.2.el6.x86_64,x86_64,-smalloc,-smalloc,-hcritbit
varnish-3.0.7 revision f544cd8
我有一个非常简单的设置。Perl Webapp 正在运行0.0.0.0:5000
,我希望 varnish 缓存它。该系统是一个虚拟“水滴”(或 VM)http://www.digitalocean.com.该机器是CentOS 盒子。
里面/etc/sysconfig/varnish/
有:
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-u varnish -g varnish \
-S /etc/varnish/secret \
-s malloc,128m"
里面/etc/varnish/default.vcl
有:
backend default {
.host = "0.0.0.0";
.port = "5000";
}
我尝试了很多方法,但都没有成功。(重启、替代配置等)我可以在 website.com:5000 上正常访问我的应用程序。
这是我使用时得到的结果varnishd
:
$varnishd -f /etc/varnish/default.vcl
-s malloc,128m -T 127.0.0.1:2000 -a 0.0.0.0:80 -d
Failed to create ./vcl.jAoXC8Rf.c: Permission denied
我尝试搜索各种帖子(一些关于 SF 的帖子),但全部都指向死胡同或针对完全不同情况的解决方案。
我敢打赌,我肯定做错了一些非常基本的事情,但我甚至已经到了关闭机器的地步,从干净的虚拟机启动,安装 perl 和我需要的模块,然后让我的应用程序运行,然后从文档中安装基本的 varnish 设置。我这样做了两次!
任何帮助和指点都将不胜感激。
答案1
backend default {
.host = "0.0.0.0";
.port = "5000";
}
这是你的问题。你不能将后端设置为 0.0.0.0。你可能想改用 127.0.0.1。
(0.0.0.0 用于告诉系统监听任何 IP 的连接,但不是有效的连接 IP)
编辑:好吧,我回答得太快了。这不会解决权限问题。请稍等片刻。
编辑2:好的,重读后我发现您已修复权限问题,因此我的解决方案应该可以修复不工作的后端。
答案2
varnish 将 vcl 编译到的目录的权限,Ubuntu 使用 /var/lib/varnish/ 尝试 chmod 666 -R /var/lib/varnish/
从上面的代码可以看出,您没有以 root 身份运行,请尝试以 root 身份测试或使用 sudo。如果成功,则问题出在权限上。