Назад | Перейти на главную страницу

как заставить лак слушать на нескольких портах

У меня есть несколько виртуальных машин с двумя сервисами на двух разных портах на каждой из них. Я хочу получить доступ к этой службе по 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 для получения дополнительных переменных и информации о них.