Примеры сценариев для изменения содержимого запросов

Примеры сценариев для изменения содержимого запросов

Примеры приведены в таблице

Примеры сценариев для изменения содержимого запросов

if (client.http_req.host:find("abc") and client.remote_p:is_network("192.0.2.0/24")) then
        client.http_req.header:field_set("XFF", client.remote_p.ip)
        client.bs = "lb1"
        client.action = "bs"
end

Если имя хоста содержит текст «abc» и запрос пришел из сети 192.0.2.0/24, то добавить заголовок «XFF: <IP-адрес пользователя при подключении>», и перенаправить запрос на Сервер Балансировки «lb1».

Результат:

WEB -- 03<p>Method GET</p><p>URL on server: /</p><p>REQ 
Headers: </p>Host: abc.domain.ru
User-Agent: curl/7.81.0
Accept: */*
XFF: 192.0.2.5
function startswith(text, prefix)
  return text:find(prefix, 1, true) == 1
end

if startswith(client.http_req.host, "abc") then
client.http_req.header:field_set("Remote-port", client.remote_p.port)
client.http_req.header:field_set("XFF", client.remote_p.ip)
client.bs = "lb1"
client.action = "bs"
end

Если имя хоста начинается с «abc», то добавить заголовок «XFF: <IP-адрес пользователя при подключении>» и «Remote-port: <порт-источник на клиенте>», и перенаправить запрос на Сервер Балансировки «lb1»

if client.http_req.path:find("abc") then
        if client.http_req.header:field_count("X-Forwarded-For") > 0 then
                xff, xffip = client.http_req.header:field_get("X-Forwarded-For")
                client.http_req.header:field_set("X-Forwarded-For", xffip ..", "..client.remote_p.ip)
        else
                client.http_req.header:field_set("X-Forwarded-For", client.remote_p.ip)
        end
client.bs = "lb1"
client.action = "bs"

end

Если:

  • путь запроса содержит «app», то при наличии заголовка X-Forwarded-For добавить IP-адрес клиента в конец запроса;
  • заголовка не было в запросе, то добавить новый.

Перенаправить запрос на Сервер Балансировки «lb1»

client.http_req.host =  client.http_req.host:match("(.*).ru") .. ".local"
client.http_req.path = "/external" .. client.http_req.path
client.bs = "lb1"
client.action = "bs"

Подменить домен «ru» на домен «local» (например, если запрос идет к app.domain.ru, то в сторону Реального Сервера должен прийти app.domain.local). В начале пути запроса добавить «/external» и перенаправить запрос на Сервер Балансировки «lb1»