Это моя первая попытка заставить Varnish работать на моем выделенном сервере, на котором размещены 2 домена с 2 отдельными IP-адресами. Моя упрощенная установка выглядит следующим образом:
Конфигурация Nginx
server {
listen ip-address-1:8080;
}
server {
listen ip-address-2:8080;
}
Лак ВКЛ
backend default {
.host = "127.0.0.1";
.port = "80";
}
И в конфиге лака я определил
VARNISH_LISTEN_PORT=80
Varnish и Nginx (и php-fpm) работают правильно, но когда я пытаюсь перейти на свой веб-сайт, появляется приветствие на странице nginx. Заголовки не содержат x-varnish. Похоже, что varnish по какой-то причине не слушает порт 80. Я подозреваю, что это связано с файлом vcl, где он слушает хост 127.0.0.1. У меня два сайта на wordpress. Где мне искать, чтобы Varnish работал правильно?
Ура, Аднан
РЕДАКТИРОВАТЬ:
Кажется, что Nginx правильно настроен на 8080, но Varnish не прослушивает правильный IP-адрес. Использование нескольких 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;
}
Если вы настраиваете Nginx для прослушивания двух IP-адресов, вы также должны использовать эти IP-адреса в Varnish. Лучший способ сделать это - использовать для Varnish две разные серверные записи.
backend server1 {
.host = "IP-ADDRESS-1";
.port = "8080";
}
backend server2 {
.host = "IP-ADDRESS-2";
.port = "8080";
}
Пожалуйста, замените IP-ADDRESS-1 и IP-ADDRESS-2 на правильные IP-адреса.
Чтобы назначить бэкэнд для входящих запросов, вы можете использовать следующий пример или изменить его в соответствии с вашими требованиями:
sub vcl_recv {
if (server.ip == "IP-ADDRESS-1") {
set req.backend = server1;
} else {
set req.backend = server2;
}
...
}
Может быть важно использовать IP-адреса для генерации хеш-идентификатора объекта кеша. Добавьте конкретный метод vcl_hash в вашу конфигурацию Varnish:
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 указывали на настроенные вами веб-сайты. В данном примере вы настроили Nginx для прослушивания порта 8080, но вы направили Varnish на порт 80. Если вы не удалили конфигурацию веб-сайта Nginx по умолчанию, Nginx ответит этим сайтом.
Это немного предположение, но я думаю, что у вас есть виртуальный хост по умолчанию, все еще определенный в nginx, и он определен для прослушивания на порту 80, и поэтому Varnish не может привязаться к этому порту.
Итак, проверьте конфигурацию nginx и удалите виртуальный хост по умолчанию.
Если это не решит проблему, укажите полные конфигурации nginx и Varnish в вопросе, а вывод netstat -lnp
.