Почему мой порт iptables не работает?

Я пытаюсь настроить переадресацию порта с порта 80 на порт 8080 на моей amazon linux ami-машине.

Я запустил

$ sudo /sbin/iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

и проверил результаты: Например, если ввести http://www.example.com/serv1/--->http://192.168.0.1/application1 http: // ...

У меня есть несколько внутренних сайтов, которые я хотел бы чтобы добраться, вставив URL-адрес с лаком. Например, если набрал

    http://www.example.com/serv1/--->http://192.168.0.1/application1
    http://www.example.com/serv2/--->http://192.168.0.1/application2

Однако на данный момент я не понимаю, как настроить лак. Моя текущая конфигурация выглядит следующим образом: default.vlc

    vcl 4.0;

    backend vm1 {
        .host = "www.example.com";
        .port = "81";
        .connect_timeout = 6000s;
        .first_byte_timeout = 6000s;
        .between_bytes_timeout = 6000s;
    }

    backend serv1 {
        .host = "192.168.0.1";
        .port = "80";
        .connect_timeout = 6000s;
        .first_byte_timeout = 6000s;
        .between_bytes_timeout = 6000s;
    }

    backend serv2 {
        .host = "192.168.0.3";
        .port = "80";
        .connect_timeout = 6000s;
        .first_byte_timeout = 6000s;
        .between_bytes_timeout = 6000s;
    }

    sub vcl_recv {
           if (req.url == "^/serv1/*$") {
               set req.url = regsub(req.url, "^/serv1/*$","/application1");
               set req.backend_hint = serv1;
           } else {
        set req.backend_hint = vm1;
        }

           if (req.url == "^/serv2/*$") {
               set req.url = regsub(req.url, "^/serv1/*$","/application2");
               set req.backend_hint = serv2;
           } else {
        set req.backend_hint = vm1;
        }          
}
0
задан 25 September 2017 в 13:30
2 ответа

ربما كنت تقصد:

http://www.example.com/serv1/--->http://192.168.0.1/application1
http://www.example.com/serv2/--->http://192.168.0.3/application2

في كلتا الحالتين يجب عليك إعادة كتابة رأس المضيف أيضًا. واستخدم regexes الصحيحة:

vcl 4.0;

backend vm1 {
    .host = "www.example.com";
    .port = "81";
    .connect_timeout = 6000s;
    .first_byte_timeout = 6000s;
    .between_bytes_timeout = 6000s;
}

backend serv1 {
    .host = "192.168.0.1";
    .port = "80";
    .connect_timeout = 6000s;
    .first_byte_timeout = 6000s;
    .between_bytes_timeout = 6000s;
}

backend serv2 {
    .host = "192.168.0.3";
    .port = "80";
    .connect_timeout = 6000s;
    .first_byte_timeout = 6000s;
    .between_bytes_timeout = 6000s;
}

sub vcl_recv {
       if (req.url == "^/serv1($|/)") {
           set req.url = regsub(req.url, "^/serv1","/application1");
           set req.http.host = "192.168.0.1";
           set req.backend_hint = serv1;
       } else {
           set req.backend_hint = vm1;
       }

       if (req.url == "^/serv2($|/)") {
           set req.url = regsub(req.url, "^/serv2","/application2");
           set req.http.host = "192.168.0.3";
           set req.backend_hint = serv2;
       } else {
          set req.backend_hint = vm1;
       }          
}
1
ответ дан 4 December 2019 в 16:07

В вашем коде есть ошибки:

vcl 4.0;

backend vm1 {
    .host = "www.example.com";
    .port = "81";
    .connect_timeout = 6000s;
    .first_byte_timeout = 6000s;
    .between_bytes_timeout = 6000s;
}

backend serv1 {
    .host = "192.168.0.1";
    .port = "80";
    .connect_timeout = 6000s;
    .first_byte_timeout = 6000s;
    .between_bytes_timeout = 6000s;
}

backend serv2 {
    .host = "192.168.0.3";
    .port = "80";
    .connect_timeout = 6000s;
    .first_byte_timeout = 6000s;
    .between_bytes_timeout = 6000s;
}

sub vcl_recv {

       set req.backend_hint = vm1;                                        // Default backend

       if (req.url ~ "^/serv1(/.*)?$") {                                  // ~ operator
           set req.url = regsub(req.url, "^/serv1","/application1");
           set req.backend_hint = serv1;
       }

       if (req.url ~ "^/serv2(/.*)?$") {                                  // ~ operator
           set req.url = regsub(req.url, "^/serv2","/application2");
           set req.backend_hint = serv2;
       }          
}
0
ответ дан 18 February 2020 в 12:00

Теги

Похожие вопросы