Как разрешить доступ к Angular приложению из внешней сети (не localhost)?
Решение: использование флагов --host и --disable-host-check
Основная проблема в том, что по умолчанию Angular DevServer привязан только к localhost. Чтобы разрешить доступ из внешней сети, нужно явно указать хост и отключить проверку заголовка Host. Вот полное решение:
ng serve --host 0.0.0.0 --disable-host-check
Или в package.json:
{
"scripts": {
"start": "ng serve --host 0.0.0.0 --disable-host-check"
}
}
Объяснение параметров
--host 0.0.0.0— привязывает сервер ко всем сетевым интерфейсам, а не только к localhost. Это позволяет обращаться к приложению по любому IP адресу вашего компьютера (192.168.x.x, 10.0.x.x и т.д.).--disable-host-check— отключает проверку заголовкаHostв HTTP запросах. Без этого флага Angular DevServer отклоняет запросы, где Host не равен localhost или 127.0.0.1.
Дополнительные настройки брандмауэра
Даже после правильного запуска, может потребоваться разрешить порт 4200 в брандмауэре Windows:
- Откройте "Брандмауэр Защитника Windows"
- Нажмите "Дополнительные параметры"
- Создайте "Правило для входящего подключения"
- Тип: "Порт"
- Протокол: TCP
- Порт: 4200
- Разрешить подключение
Проверка работоспособности
После запуска с правильными флагами, проверьте:
# На вашем компьютере (должно работать)
curl http://localhost:4200
# С другого устройства в сети (замените IP на ваш)
curl http://192.168.1.100:4200
Важные замечания
- Это решение подходит только для разработки и локальной сети. Для продакшена используйте
ng buildи разворачивайте на полноценном веб-сервере (Nginx, Apache и т.д.). - Флаг
--disable-host-checkснижает безопасность, так как позволяет любому хосту обращаться к серверу. Используйте его только в доверенной сети. - В Angular CLI версии 17+ флаг
--disable-host-checkможет быть заменён на настройку вangular.json:
// angular.json
"projects": {
"your-project": {
"architect": {
"serve": {
"options": {
"host": "0.0.0.0",
"disableHostCheck": true
}
}
}
}
}
Этот метод гарантирует, что ваше Angular приложение будет доступно с любого устройства в локальной сети по IP адресу вашего компьютера.
<<Альтернативный подход: использование --public-host
Если вы хотите более тонко настроить доступ, можно использовать флаг --public-host. Он указывает, какой хост будет использоваться для генерации URL в ответах сервера (например, для WebSocket или HMR):
ng serve --host 0.0.0.0 --public-host http://192.168.1.100:4200
Этот подход полезен, если ваше приложение использует WebSocket (например, Angular Universal с Hot Module Replacement) и вам нужно, чтобы клиенты знали точный адрес сервера. Однако для простого доступа к статическим файлам Angular достаточно первого решения.
Использование ngrok для внешнего доступа
Если вам нужен доступ не только из локальной сети, но и из интернета (например, для демонстрации клиенту), используйте ngrok:
# Установка
npm install -g ngrok
# Запуск туннеля к вашему localhost
ngrok http 4200
Ngrok создаст публичный URL (например, https://abc123.ngrok.io), который будет перенаправлять трафик на ваш локальный сервер. Это безопаснее, чем открывать порты в роутере.
Оба метода решают проблему доступа извне, но выбирайте в зависимости от ваших потребностей: для локальной сети — флаги --host и --disable-host-check, для интернета — ngrok.
Ответов пока нет.
Войдите чтобы оставить ответ