#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