Я пытаюсь настроить переадресацию порта с порта 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;
}
}
ربما كنت تقصد:
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;
}
}
В вашем коде есть ошибки:
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;
}
}