Скрипт HAProxy Lua не печатает / регистрирует хост или путь в режиме tcp

#lua #haproxy

#lua #haproxy

Вопрос:

Проблема в том, что при использовании режима tcp скрипт Lua не регистрирует / печатает хост, путь и регистрируется / печатается только ip. Если я меняю режим на http, он печатает / выводит все, но мне это нужно в режиме tcp. Кто-нибудь может мне помочь это исправить?

Вот как выглядит мой файл конфигурации HAProxy:

 frontend RTMP
bind 0.0.0.0:1935
mode tcp
use_backend %[lua.choose_backend("d")]

backend a
    balance roundrobin
    mode tcp
    server origin_1 192.168.1.19:1935 check fall 3 rise 2

backend b
    balance roundrobin
    mode tcp
    server origin_1 192.168.1.20:1935 check fall 3 rise 2
  

И вот как мой скрипт Lua:

 function my_hash(txn, salt)

local str = ""
str = "HOST: " .. txn.sf:req_fhdr("host")
str = str .. " PATH: "
str = str .. txn.sf:path()
str = str .. " SRC: "
str = str .. txn.sf:src()

core.log(core.info, str)
   return 'a'
end

core.register_fetches("choose_backend", my_hash)
  

Я просто хочу получить запрошенный uri и путь…такая простая вещь

Комментарии:

1. Это не совсем простая вещь. Вы спрашиваете, почему HTTP-выборки не работают на интерфейсе, отличном от HTTP . Действительно ли трафик HTTP? Если да, то почему в режиме TCP? Если нет, то о каком протоколе идет речь? Если клиент заговорит первым, должна быть возможность проанализировать входящий запрос в Lua, но требуется дополнительная информация о вашем приложении.

2. Режим TCP, потому что это rtmp-сервер, поэтому клиент будет подключаться к: rtmp: // domain / something через HAProxy, но «something» может быть чем угодно, поэтому я хотел узнать этот URL-путь запроса 🙂

3. Я просто хочу, чтобы HA-Proxy балансировал загрузку RTMP (TCP) НА основе URL.

Ответ №1:

У меня была похожая проблема. В моем случае это было решено путем замены интерфейса на listen. И добавляет «прозрачный параметр»

 listen RTMP
  option transparent
  bind 0.0.0.0:1935
  mode tcp
  use_backend %[lua.choose_backend("d")]enter code here