这是我的第一个使Varnish在我的专用服务器上工作,该服务器托pipe2个具有2个独立IP地址的域。 我简化的设置如下:
Nginx conf
server { listen ip-address-1:8080; } server { listen ip-address-2:8080; }
清漆vcl
backend default { .host = "127.0.0.1"; .port = "80"; }
在我定义的清漆conf
VARNISH_LISTEN_PORT=80
Varnish和Nginx(和php-fpm)运行正常,但是当我尝试去我的网站时,显示nginx页面的欢迎。 标题中没有x-varnish。 看起来由于某种原因,清漆不听80端口。我怀疑这与127.0.0.1主机正在监听的vcl文件有关。 我正在运行两个WordPress的网站。 我应该在哪里寻找让Varnish正常工作?
干杯,阿德南
编辑:
Nginx似乎在8080正确,但Varnish不听正确的IP地址。 使用Jens多个清漆IP地址netstat -lnp
产生:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 46.105.40.241:8080 0.0.0.0:* LISTEN 21610/nginx tcp 0 0 5.135.166.39:8080 0.0.0.0:* LISTEN 21610/nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 21610/nginx tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 2544/named tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 1195/vsftpd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1184/sshd tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 2544/named tcp 0 0 46.105.40.241:443 0.0.0.0:* LISTEN 21610/nginx tcp 0 0 5.135.166.39:443 0.0.0.0:* LISTEN 21610/nginx tcp 0 0 127.0.0.1:6082 0.0.0.0:* LISTEN 21350/varnishd tcp 0 0 :::80 :::* LISTEN 21351/varnishd tcp 0 0 ::1:53 :::* LISTEN 2544/named tcp 0 0 :::22 :::* LISTEN 1184/sshd tcp 0 0 ::1:953 :::* LISTEN 2544/named udp 0 0 127.0.0.1:53 0.0.0.0:* 2544/named udp 0 0 ::1:53 :::* 2544/named
default.vcl
backend ikhebeenbril { .host = "5.135.166.39"; .port = "8080"; } backend sunculture { .host = "46.105.40.241"; .port = "8080"; } sub vcl_recv { if (server.ip == "5.135.166.39") { set req.backend = ikhebeenbril; } else { set req.backend = sunculture; } ... } sub vcl_hash { hash_data(server.ip); if (req.http.host) { hash_data(req.http.host); } hash_data(req.url); if (req.http.Accept-Encoding) { hash_data(req.http.Accept-Encoding); } return (hash); }
nginx服务器块
server { listen 5.135.166.39:80; listen 5.135.166.39:443 default ssl spdy; server_name www.ikhebeenbril.nl; } server { listen 46.105.40.241:80; listen 46.105.40.241:443 default ssl spdy; server_name www.thesunculture.com; }
如果你configuration你的Nginx监听两个IP地址,你也应该在Varnish中使用这些IP地址。 最好的办法是使用两个不同的后端logging来清漆。
backend server1 { .host = "IP-ADDRESS-1"; .port = "8080"; } backend server2 { .host = "IP-ADDRESS-2"; .port = "8080"; }
请用正确的IP地址replaceIP-ADDRESS-1和IP-ADDRESS-2。
要将后端分配给传入请求,可以使用以下示例或根据您的要求对其进行修改:
sub vcl_recv { if (server.ip == "IP-ADDRESS-1") { set req.backend = server1; } else { set req.backend = server2; } ... }
使用IP地址来生成caching对象的哈希ID可能很重要。 将特定的vcl_hash方法添加到您的Varnishconfiguration中:
sub vcl_hash { hash_data(server.ip); if (req.http.host) { hash_data(req.http.host); } hash_data(req.url); if (req.http.Accept-Encoding) { hash_data(req.http.Accept-Encoding); } return (hash); }
请注意将Varnish的后端指向您configuration的网站。 在给定的示例中,您已经configurationNginx在端口8080上侦听,但是您已经将Varnish定位到端口80.如果您还没有删除Nginx的默认网站configuration,Nginx将会响应此网站。
这是一个猜测,但我认为你有一些仍然在nginx中定义的默认虚拟主机,并且定义为侦听端口80,因此Varnish无法绑定到该端口。
所以,检查你的nginxconfiguration,并删除默认的虚拟主机。
如果这不能解决问题,请在问题中input完整的nginx和Varnishconfiguration,并输出netstat -lnp
。