Nginx — невозможно использовать доменное имя mDNS на вышестоящем сервере
Минимальный пример
Компьютеры A и B, где B использует mDNS с доменным именем.b.local
и установите службу ssh на порт 2222. A и B не включают брандмауэр.
В машине А:
stream {
upstream b-ssh {
server b.local:2222;
}
server {
listen 2222;
listen [::]:2222;
proxy_pass b-ssh;
}
}
Когда используешьnginx -t
чтобы проверить эту конфигурацию на машине A, произошла ошибка:
[emerg] host not found in upstream "b.local:2222"
Однако в машине A, используяssh -p 2222 b.local
работает нормально(-4
или-6
тоже тестируется)
Возможно полезная информация
В моем реальном примере на машине A установлена Windows 11, которая отключает все брандмауэры; машина B — это WSL2 Ubuntu 21.10 внутри машины A, которая использует службу mDNS avahi-daemon.
В стороне машины Аnginx.conf
, я также установил проход HTTP-прокси:
http {
server {
listen 8929;
listen [::]:8929;
location / {
proxy_pass http://b.local:8929;
}
}
}
и это работает хорошо, даже несмотря на то, что используется доменное имя mDNS .
Если я заменю доменное имя mDNS на его реальный IP-адрес на вышестоящем сервере, прокси-сервер SSH будет работать.
1 ответ
Установитьlibnss-mdns
и убедитесь, что в нем есть запись для mdns/etc/nsswitch.conf
:
hosts: files mdns [NOTFOUND=return] dns
Вы можете проверить разрешение mdns с помощьюgetent
:
getent hosts b