У меня есть несколько виртуальных машин с двумя сервисами на двух разных портах на каждой из них. Я хочу получить доступ к этой службе по URL-адресу http: // virtual_url_1: 80 и http: // virtual_url1: 8080 для той, которая установлена на первой виртуальной машине, и так далее.
Я использую лак для ретрансляции трафика от аппаратного узла к виртуальным узлам. Я могу отличить virtual_url_1 от virtual_url_2, например, следующим образом:
if (req.http.host == "virtual_url_1") {
set req.backend = virtual_node_1;
remove req.http.X-Forwarded-For;
set req.http.X-Forwarded-For = client.ip;
if (req.request == "POST") {
return(pipe);
}
return (lookup);
}
Для различия порта я видел, что varnish может прослушивать разные порты с этим в / etc / default / varnish
DAEMON_OPTS="-a 0.0.0.0:80,0.0.0.0:8080 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G"
Но теперь, после перехвата, проблема состоит в том, чтобы ретранслировать трафик с порта 80 на серверную часть 80 и трафик с порта 8080 на серверную часть 8080.
Существует переменная req.http.host, я ищу req.port, похожий на тот, для выполнения этой цели.
Может ли кто-нибудь дать мне совет? Это вообще возможно? Или мне следует запустить два разных экземпляра varnish (первый прослушивает и отвечает на порт 80, второй - на порт 8080), чего я предпочитаю избегать?
Большое спасибо!
Использовать server.port
Переменная в вашем vcl, и она должна помочь.
Не нужно запускать два экземпляра лака!
Видеть man 7 vcl
для получения дополнительных переменных и информации о них.