Я изучаю, как использовать обратный прокси-сервер на основе имен серверов с nginx. У меня все работает на 100% в сети домашнего офиса. Но когда я открываю домашний брандмауэр и перенаправляю внешний трафик на мой обратный прокси-сервер в моем доме, это похоже на то, что nginx не распознает правила имени сервера и продолжает использовать правило по умолчанию. Итак, мой вопрос: как заставить обратный прокси-сервер с именами серверов работать с внешним трафиком?
Чтобы описать, что я имею в виду, я покажу Сценарий успеха и Неудачный сценарий.
СЦЕНАРИЙ УСПЕХА - Обратный прокси трафика домашней сети
Этот сценарий работает идеально. У меня дома есть компьютер. Компьютер имеет IP-адрес 192.168.0.30. На компьютере установлен nginx. Затем я добавил эти две записи в свой /и т.д./хосты
192.168.0.31 home1.john.com
192.168.0.32 home2.john.com
Затем я добавил это в свой /etc/nginx/nginx.conf
транслировать {
включить stream_conf.d/*.conf;
}
Затем я сделал этот файл /etc/nginx/stream_conf.d/*.conf
:
log_format mqtt '$remote_addr [$time_local] $protocol $status $bytes_received '
'$bytes_sent $upstream_addr';
карта $ ssl_preread_server_name $ имя {
home1.john.com hive_mq;
home2.john.com hive_mq2;
по умолчанию hive_mq;
}
вышестоящий hive_mq {
сервер 192.168.0.31:1883;
зона tcp_mem 64k;
}
вышестоящий hive_mq2 {
сервер 192.168.0.32:1883;
зона tcp_mem 64k;
}
сервер {
слушать 1883;
прокси_пароль $имя;
proxy_connect_timeout 1 с;
ssl_preread включен;
журнал_доступа /var/log/nginx/mqtt_access.log mqtt;
журнал_ошибок /var/log/nginx/mqtt_error.log;
}
Затем я запускаю эти команды:
nginx # запускает nginx
nginx -s reload # убедитесь, что я использую последние файлы conf
mosquitto_pub -h home1.john.com -t hello/world -m 'test to home1.john.com server' # 192.168.0.31 успешно получает сообщение, а 192.168.0.32 успешно игнорирует это сообщение
mosquitto_pub -h home2.john.com -t hello/world -m 'test to home2.john.com server' # 192.168.0.32 успешно получает сообщение, а 192.168.0.31 успешно игнорирует
Все абсолютно идеально.
СЦЕНАРИЙ ОШИБКИ - Обратный прокси внешнего трафика
Я подошел к своему WiFi-маршрутизатору и включил переадресацию портов. Я возьму любой внешний трафик с порта 1883 и перенаправлю его на IP-адрес 192.168.0.30 (мой обратный прокси-компьютер с nginx) через порт 1883.
Затем я поехал на своей машине к дому моего друга и взял его ноутбук. Я добавил эти две записи в его ноутбук. /и т.д./хосты
файл:
# предположим, что 72.142.34.203 - мой домашний общедоступный IPv4-адрес
72.142.34.203 home1.john.com
72.142.34.203 home2.john.com
Затем я выполнил следующие команды на его ноутбуке:
mosquitto_pub -h home1.john.com -t hello/world -m 'test to home1.john.com server' # 192.168.0.31 успешно получает сообщение, а 192.168.0.32 успешно игнорирует это сообщение
mosquitto_pub -h home2.john.com -t hello/world -m 'test to home2.john.com server' # НЕВЕРНЫЙ РЕЗУЛЬТАТ - 192.168.0.31 получил это сообщение, а 192.168.0.32 не получил это сообщение
Почему 192.168.0.32 не удалось получить тест на сервер home2.john.com
из второй команды? Как будто обратный прокси-сервер nginx не распознает имя сервера
... эта информация потеряна, когда я сделал переадресацию портов на своем маршрутизаторе? Или я что-то неправильно понял? Как заставить обратный прокси-сервер с именем сервера работать с внешним трафиком в мою домашнюю сеть