Моя система состоит из NGINX, настроенного как балансировщик нагрузки, ожидающий дейтаграмм UDP.
Клиент открывает сокет UDP, назначает случайный порт источника и отправляет запрос, ожидая ответа.
Скажем, источник/назначение дейтаграммы запроса настроен как SOURCE_IP, RANDOM_SOURCE_PORT -> NGINX_IP, NGINX_PORT.
NGINX направляет дейтаграмму на один из узлов, но по замыслу, чтобы реализовать высокую доступность, другой сервер может отправить ответ. Имейте в виду, что два узла синхронизируются с использованием кеша, в котором хранятся исходный IP-адрес и порт (те, что NGINX, поскольку он действует как прокси).
Теперь дейтаграмма запроса, полученная первым сервером, NGINX_IP, NGINX_RANDOM_SOURCE_PORT -> SERVER1_IP, SERVER_PORT.
Дейтаграмма ответа SERVER2_IP, SERVER_PORT -> NGINX_IP, NGINX_RANDOM_SOURCE_PORT.
NGINX, похоже, не направляет сообщение обратно клиенту.
Могу ли я настроить NGINX для маршрутизации UDP-датаграммы ответа обратно в источник через NGINX, игнорируя IP-адрес источника ответа и полагаясь только на порт назначения (NGINX_RANDOM_SOURCE_PORT)? Или мне следует использовать другой компонент между NGINX и узлами приложения? Какую архитектурную концепцию мне не хватает?